====== Перенос 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** я не копировал. Там копировать нечего. Нужно только не забыть поправить разрешения этого раздела, после того как копирование будет завершено и мы загрузимся с нового диска. Туда как правило **должны иметь возможность писать все**.