>> и руками (tar) восстановить: kernel, base и lib32 (если amd64)
> А как руками восстановить? туда куда нужно?
> я tar не пользовался.
> да и потом на CDRom'е в папке /usr/freebsd-dist только единственный файл MANIFEST
> когда просматриваешь его там встречаются такие kernel, base грузимся с FreeBSD-9.2-RELEASE-amd64-disc1.iso или memstick:
FreeBSD Installer:
Welcome...
<Install> <Shell> <Live CD>
выбираем <Live CD>, заходим под рутом (без пароля)
# mount
/dev/iso9660/FREEBSD_INSTALL on / (cd9660, local, read-only)
devfs on /dev (devfs, local, multilabel)
/dev/md0 on /var (ufs, local)
/dev/md1 on /tmp (ufs, local)
#
# ls -la /usr/freebsd-dist/
total 295511
drwxr-xr-x 2 root wheel 2048 Sep 27 2013 .
drwxr-xr-x 15 root wheel 2048 Sep 27 2013 ..
-rw-r--r-- 1 root wheel 782 Sep 27 2013 MANIFEST
-rw-r--r-- 1 root wheel 67671964 Sep 27 2013 base.txz
-rw-r--r-- 1 root wheel 1442376 Sep 27 2013 doc.txz
-rw-r--r-- 1 root wheel 887524 Sep 27 2013 games.txz
-rw-r--r-- 1 root wheel 83735660 Sep 27 2013 kernel.txz
-rw-r--r-- 1 root wheel 12622248 Sep 27 2013 lib32.txz
-rw-r--r-- 1 root wheel 36178396 Sep 27 2013 ports.txz
-rw-r--r-- 1 root wheel 100062284 Sep 27 2013 src.txz
#
- смотрим что у нас на hdd (ниже для gpt):
# gpart show
или
# gpart show ada0
=> 34 16777149 ada0 GPT (8.0G)
34 128 1 freebsd-boot (64k)
162 15935360 2 freebsd-ufs (7.6G)
15935522 837632 3 freebsd-swap (409M)
16773154 4029 - free - (2M)
#
ada0p2 - корень, все на нем
- создаем mount_point:
# mkdir /tmp/root
- прогоняем fsck:
# fsck_ffs -fy /dev/ada0p2
если у Вас несколько FS на диске: /usr - отдельная FS, /var,
прогоняете на них fsck_ffs тоже и монтируете внутрь /tmp/root,
например, ada0p4 - /usr, ada0p5 - /var
# fsck_ffs -fy /dev/ada0p4
# fsck_ffs -fy /dev/ada0p5
- монтируем, сначала корень, затем уже в него все остальное
# mount /dev/ada0p2 /tmp/root
# ls -la /tmp/root
если есть отдельные FS:
# mount /dev/ada0p4 /tmp/root/usr
# mount /dev/ada0p5 /tmp/root/var
# mount
/dev/iso9660/FREEBSD_INSTALL on / (cd9660, local, read-only)
devfs on /dev (devfs, local, multilabel)
/dev/md0 on /var (ufs, local)
/dev/md1 on /tmp (ufs, local)
/dev/ada0p2 on /tmp/root (ufs, local, journaled soft-updates)
- сохраняете все что Вам нужно из etc (обычно etc/ssh/*, passwd,master.passwd, pwd.db,
spwd.db
например:
# mkdir /tmp/etc
# cd /tmp/etc
# cp -R /tmp/root/etc/ssh .
# cp /tmp/root/etc/passwd .
# cp /tmp/root/etc/master.passwd .
# cp /tmp/root/etc/pwd.db .
# cp /tmp/root/etc/spwd.db .
# cp /tmp/root/etc/rc.conf .
возможно что-то еще, конфиг firewall'а, файл hosts... (вообще-то rc.conf создается
руками и в разворачиваемом дистрибутиве его нет)
- разворачиваем поверх того что есть: kernel,base,lib32 (лучше руками или добавить
exclude для var
# cd /usr/freebsd-dist/
запускаем sh:
# sh
# for file in base.txz kernel.txz lib32.txz ; do (cat $file | tar --unlink -xvpJf - -C /tmp/root); done
# exit
или тоже самое руками последовательно:
Важно, как и для сохранения нужных файлов из etc, так и данные в старом var:
# tar --unlink --exclude "./var" -xvpJf /usr/freebsd-dist/base.txz -C /tmp/root
выше, мы пропускаем извлечение /var, чтобы сохранить наш
# tar --unlink -xvpJf /usr/freebsd-dist/kernel.txz -C /tmp/root
# tar --unlink -xvpJf /usr/freebsd-dist/lib32.txz -C /tmp/root
Все, копируйте назад ssh, passwd, master.passwd, pwd.db, spwd.db и все остальное
что сохранили.
- размонтируете дисковые FS и reboot (загружаемся с HDD)
ps. Для начала, можете попробовать в виртуалке