суббота, 24 ноября 2018 г.

CentOS7: монтируем ufs разделы

После переезда с фряхи на центос бывает необходимость получить доступ к старым данным, варианты там - zfs и ufs. Рассмотрим случай под ufs
Под центос 6 в elrepo была сборка dkms-ufs, но под 7 версию её уже нет. Увы, SRPM от 6 тоже недоступно, нужно собрать самим.



Итак, открываем инструкцию
https://wiki.centos.org/HowTos/BuildingKernelModules

Ставим пакеты
yum -y install kernel-devel dkms

В /usr/src/kernels/ у нас появились исходники. Проверим
ls -la /usr/src/kernels/*/fs/ufs
total 16
drwxr-xr-x.  2 root root 4096 Nov 24 16:46 .
drwxr-xr-x. 75 root root 4096 Nov 24 16:46 ..
-rw-r--r--.  1 root root 1766 Sep 26 18:17 Kconfig
-rw-r--r--.  1 root root  199 Sep 26 18:17 Makefile

Но косяк в том, что они не полные! Поэтому при попытке что-либо там собрать будет ошибка
make[1]: *** No rule to make target `arch/x86/syscalls/syscall_32.tbl', needed by `arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h'.  Stop.

Этого недостаточно, нужно выкачать полные исходники ядра. Можно их искать руками, а можно выкачать самой системой
yum -y install yum-utils
yumdownloader --source kernel
rpm -Uvh kernel*.src.rpm

Ставятся они в /lib/modules.
Но тут обнаруживаем, что fs/ufs тупо отсутствует! Так что этот метод сойдёт, когда нужно пропатчить что-то существующее, а для старых модулей - шаг 3, качаем ванильное ядро нужной версии и собираем оттуда.

А в данном случае находим fuse версию и собираем.
(заброшенный оригинал: https://github.com/mkatiyar/fuse-ufs2)
У меня нет ламерской привычки make install на сторонний софт, будем опытными админами и сразу соберём пакет. Попутно в спек файле описаны нужные зависимости, не будет потом долгого поиска "а это что за ошибка и как её исправить...". Ну и бонусом - можно (и нужно) разделять сервер сборки и прод.
(работаем НЕ от рута!)
также можно сразу освоить и mock

При необходимости доставляем git

$ rpmdev-setuptree
и в ~/rpmbuild/SPECS добавляем новый спек, который можно взять тут
https://github.com/dragonfly-net/fuse-ufs2

Для сборки нужен yum groupinstall "Development tools"
rpmbuild -ba ~/rpmbuild/SPECS/fuse-ufs2.spec

Собираем, ставим, монтируем
# fuse-ufs /dev/sdb1 /mnt/sdb/
# ls -la /mnt/sdb/
total 40
...



Не рассмотрена сборка dkms - тут нам не нужна производительность, достаточно возможности чтения. А оставлять ufs под работу с данными (на запись) вообще крайне плохая идея, ufs достаточно ущербна, это жалкий аналог ext2.

Комментариев нет:

Отправить комментарий