Arch Linux: перенос системы на новый HDD

По просьбам трудящихся подготовил статейку, содержащую инструкцию, сумбурно изложенную в теме. Было лень писать прямо с нуля, поэтому сделал копипасту со своего личного блога.

1. Подготовка почвы и копирование системы

Итак, мы установили новый HDD в системный блок, проверили его работоспособность. Устанавливаем Live-носитель и загружаемся с него. Делается это для того, чтобы старый и новый винтчестер не задействовались для загрузки и работы системы.

Допустим теперь, что Вы имеете следующую конфигурацию разделов на старом HDD, который видится системой как /dev/sda (в вашем случае имя устройства можжет быть иным!)

    /dev/sda1 - корневая файловая система (/)
    /dev/sda2 - раздел подкачки (swap)
    /dev/sda3 - раздел для хранения домашних каталогов пользователей (/home)

Запускаем программу для разметки HDD (в моем случае он определился системой как /dev/sdb)

# fdisk /dev/sdb

и размечаем диск, как нам требуется. Я оставил старую разметку, изменив лишь размер разделов. Если Вы желаете, например, поместить /var в отдельный раздел, то смело создаете раздел под него. Итого, у нас выходит следующая разметка

    /dev/sdb1 - корень системы (/)
    /dev/sdb2 - swap
    /dev/sdb3 - /home

а в случае размещения /var в отдельном разделе

    /dev/sdb1 - корень (/)
    /dev/sdb2 - swap
    /dev/sdb3 - /home
    /dev/sdb4 - /var

Форматируем разделы в нужную Вам файловую систему

# mkfs -t ext4 /dev/sdb1
# mkfs -t ext4 /dev/sdb3
# mkfs -t ext4 /dev/sdb4
# mkswap /dev/sdb2

Теперь необходимо правильно примонтировать имеющиеся разделы. Создаем следующие каталоги

# mkdir /mnt/oldfs
# mkdir /mnt/newfs

для монтирования корневых разделов старого и нового дисков

# mount /dev/sda1 /mnt/oldfs
# mount /dev/sdb1 /mnt/newfs
Монтируем домашний каталог старого hdd

# mkdir /mnt/oldfs/home
# mount /dev/sda3 /mnt/oldfs/home

Монтируем домашний каталог новго hdd

# mkdir /mnt/newfs/home
# mount /dev/sdb3 /mnt/newfs/home

Если мы размещаем /var в отдельном разделе, то создаем точку монтирования и монтируем этот раздел

# mkdir /mnt/newfs/var
# mount /dev/sdb4 /mnt/newfs/var

Ок, всё готово. Теперь копируем систему

# cp -rav /mnt/oldfs/* /mnt/newfs

то есть копируем все файлы рекурсивно, с сохранением атрибутов! Следует обратить внимаение на ключ -a, который присутствует в команде копирования именно для того, чтобы атрибуты файлов и каталогов, скопированных с нового hdd на старый не изменились. В противном случае Ваша система просто не загрузится, а если и загрузится, то окажется неработоспособной, так как атрибуты прав доступа и владельцев файлов изменятся и пользовтальские процессы и процессы ядра не смогут использовать файловую систему.

Время копирования напрямую зависит от объема переносимых данных. Следует набраться терпения...

После завершения копирования отмонтируем оба диска

# umount /mnt/newfs/var
# umount /mnt/newfs/home
# umount /mnt/oldfs/home
# umount /mnt/oldfs

Корневой раздел нового диска оставляем смонтированным - он нам ещё пригодится.

2. Готовим систему к перезагрузке

Осталось несколько последних штрихов. Во-первых необходимо отредактировать файл /etc/fstab для правильного монтирования разделов на новом диске. Если вы не меняли структуру разметки, просто убедитесь в том, что настройки монтирования верны. Если, как в нашем примере, вы переместили /var в отдельный раздел, то добавим в /etc/fstab новую запись

# echo "/dev/sda4 /var ext4 defaults 0 1" >> /etc/fstab

Если при загрузке Вашей системе используется RAM-диск, на всякий случай перегенерируем его. Делаем chroot в скопированную систему

# mount -o bind /dev /mnt/newfs/dev
# mount -o bind /proc /mnt/newfs/proc
# mount -o bind /sys /mnt/newfs/sys
# chroot /mnt/newfs bash

и запускаем перегенерацию RAM-диска

# mkinitcpio -p linux

Устанавливаем загрузчик

# grub-install /dev/sdb

Если Вы используете файл /etc/grub.cfg сгенерированный автоматически, его надо перегенерировать

# grub-mkconfig -o /boot/grub/grub.cfg

Если Вы сконфигурировали загрузчик вручную, убедитесь в корректности его конфигурации для новой системы.

После этого выходим из chroot, отмонтируем корневую ФС и перезагружаемся

# exit
# umount /mnt/newfs
# reboot

Если всё выполненно верно, Ваша система загрузится с нового диска как ни в чем не бывало. Все Ваши данные и настройки останутся без изменений.
Да пребудет с нами Сила...!
CPU Intel Core i7 2600K/RAM DDR3 16 Gb/NVidia GForce 580GTX/HDD Seagate SATA3 2 Tb
http://maisvendoo.org
Спасибо за проделанную работу. Возьму на заметку.
у меня через раз загружается система, в чем может быть проблема?
зачем rw,relatime,data=ordered?
и зачем запускать перегенерацию RAM-диска?
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
зачем rw,relatime,data=ordered?
rw - как бы понятно;
relatime - очевидно имелось ввиду noatime!;
data=ordered - этот режим журналирования включен по умолчанию, посему не надо.

nafanja
зачем запускать перегенерацию RAM-диска?
А как иначе, если загрузочный образ и все что с ним связано изменил расположение? У мну вообще система завелась почему-то только после переустановки ядра.
И, кстати:
maisvendoo
# echo "/dev/sda4 /var ext4 rw,relatime,data=ordered 0 2" >> /etc/fstab
Почему точка монтирования - /var???
Ну и, раз это корневая файловая система, приоритет проверки можно установить в 1.

add.
Да и вообще, изменения в fstab лучше подправить руками. )
Aivar
rw - как бы понятно;
relatime - очевидно имелось ввиду noatime!;
data=ordered - этот режим журналирования включен по умолчанию, посему не надо.
defaults включает в себя все что нужно.

Aivar
А как иначе, если загрузочный образ и все что с ним связано изменил расположение? У мну вообще система завелась почему-то только после переустановки ядра.
он ни с чем не связан, он автономный.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
В опциях монтирования плаваю, к стыду своему. Исправлю согласно замечаниям
Да пребудет с нами Сила...!
CPU Intel Core i7 2600K/RAM DDR3 16 Gb/NVidia GForce 580GTX/HDD Seagate SATA3 2 Tb
http://maisvendoo.org
nafanja
defaults включает в себя все что нужно.
Не все, а лишь rw, suid, dev, exec, auto, nouser и async. Такой полезной особенно для SSD опции как noatime нет.

nafanja
он ни с чем не связан, он автономный.
Бегло просмотрел initramfs-linux.img. Похоже сейчас обращение к устройству выполняется исходя из выхлопа blkid. А, помнится, в мандриве был такой затык: делаем образ системы, форматируем раздел (естественно, uuid поменялся), восстанавливаем систему на прежнее место и получаем waiting for device и задержку в 2 минуты перед загрузкой. Лечилось распаковкой загрузочного образа ядра, правкой uuid с последующей упаковкой назад.

Кстати, такой опции монтирования как relatime раньше тоже не было. Но, если верить тырнету, эта опция сейчас включена по умолчанию, а нужна она вам или нет - решать вам.
Aivar
Не все, а лишь rw, suid, dev, exec, auto, nouser и async. Такой полезной особенно для SSD опции как noatime нет.
ну ты же понимаешь что для ssd это специфичные параметры, у каждого они свои в зависимости от потребностей.

https://ru.wikipedia.org/wiki/Fstab
noatime Отключает запись информации о последнем времени доступа (atime) при каждом чтении файла.
noatime бывает и вреден в некоторых случаях!
https://ru.wikipedia.org/wiki/Fstab
relatime Включает запись информации о последнем времени доступа при чтении файла, если предыдущее время доступа (atime) меньше времени изменения файла (ctime). Включено по умолчанию на Linux начиная с v.2.6.30.
relatime несколько более щадящий параметр по сравнению с noatime.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
noatime бывает и вреден в некоторых случаях!
Возможно, вот только в течении последних пару лет я не заметил никаких побочных эффектов.
 
Зарегистрироваться или войдите чтобы оставить сообщение.