====== Перенос FreeBSD на новый винт ======
В первую очередь, смотрим, как были смонтированы наши разделы на старом винте:
proxy.dtservice.ru:~#> df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 989M 73M 837M 8% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1d 2.9G 10K 2.7G 0% /tmp
/dev/ad0s1f 24G 6.9G 15G 32% /usr
/dev/ad0s1e 6.8G 4.1G 2.1G 66% /var
devfs 1.0K 1.0K 0B 100% /var/named/dev
Подключаем новый винт в принципе к любой машине. Нарезаем на нем точно такие же слайсы (имеется ввиду буквы, размер делаем таким какой нам требуется), форматируем, делаем загрузочным. Все это делается при помощи загрузочного диска с FreeBSD.
Подключаем старый винт и новый. Грузимся со старого в **Single mode**. Монтируем все наши разделы:
#mount -a
Создаем нужные промежуточные директории - точки монтирования для слайсов нового диска:
cd /mnt
mkdir root
mkdir usr
mkdir var
Второй винт я подключал как мастер на IDE2. таким образом обращаться к нему нужно как ad2 с соответствующими поправками на имена слайсов. Примонтируем разделы нового диска в созданные нами точки монтирования:
mount /dev/ad2s1a /mnt/root
mount /dev/ad2s1f /mnt/usr
mount /dev/ad2s1e /mnt/var
На этом этапе все готово для переноса. Заходим в нужный раздел и копируем старые данные на новый диск:
cd /
find . -xdev -print | cpio -m -p -V /mnt/root
cd /var
find . -xdev -print | cpio -m -p -V /mnt/var
cd /usr
find . -xdev -print | cpio -m -p -V /mnt/usr
На FreeBSD 8.2 эти команды вызывают ошибку. Подправили утилиту **cpio** - из нее исчезла опция **-V**, вместо нее используется **-v**. Кроме того, если заливать разделы на уже имеющуюся операционку, то файлы не будут переписаны. И если мы потом стартанем с такого винта, то получим ту же самую систему, не ту которую пытались перегнать на новый винт. Связано это с тем, что по умолчанию имеющиеся файлы не переписываются. Чтобы исправить это, команды должны быть такими:
cd /
find . -xdev -print | cpio -p -m -v -u /mnt/root
cd /var
find . -xdev -print | cpio -p -m -v -u /mnt/var
cd /usr
find . -xdev -print | cpio -p -m -v -u /mnt/usr
**Опции:**\\
**-p** - Читать листинг файлов со стандартного ввода и копировать файлы в указанный каталог.\\
**-m** - Устанавливать время модификации и создания такое как у исходных файлов.\\
**-v** - Печатает каждое имя файла на stderr, вместе с **-t** выводит более детальный листинг по каждому файлу. Вместо устаревшей **-V**.\\
**-u** - Безусловно переписывать имеющиеся файлы.
То же самое при помощи **dump / restore**:
cd /mnt/root; dump -f - / | restore -rf -
cd /mnt/var; dump -f - /var | restore -rf -
cd /mnt/usr; dump -f - /usr | restore -rf -
Вообще, одна из гуру FreeBSD и Unix вообще Elizabeth D. Zwicky проводила [[http://www.coredumps.de/doc/dump/zwicky/testdump.doc.html|сравнительный тест различного рода программ копирования / восстановления]]. Со всеми тестами справились только dump / restore. Поэтому на заданный вопрос, что лучше использовать, она ответила: только **dump**. Сравнительные тесты убедительно показывают, что эти утилиты справились со всеми задачами на отлично.
**/tmp** я не копировал. Там копировать нечего. Нужно только не забыть поправить разрешения этого раздела, после того как копирование будет завершено и мы загрузимся с нового диска. Туда как правило **должны иметь возможность писать все**.