Перенос Линукс с HDD на SSD
Расскажу подробно, как я делал перенос своих настроенных систем Линукс, установленных на HDD, на купленный SSD. В теорию, как обычно, вдаваться не буду, только практика.
Итак, купил я SSD 480 Гб. Естественно, SSD нужен не для хранения фильмов и музыки, а для установки операционной системы, так как именно твердотельные накопители обеспечивают быструю работу системы. У меня на жёстких дисках были установлены, настроены и прекрасно работали три ОС Линукс: Debian Buster, Arch Linux и Calculate Linux. Понятно, что мне совершенно не улыбалось переустанавливать и перенастраивать рабочие системы. Оставался простой выход — перенести системы на SSD как есть, грубо говоря, скопировать. Опыт работы с cp, tar, rsync и Clonezilla у меня был, оставалось выбрать один из этих способов и применить.
Cp — шелл-команду копирования я применять не стал, не знаю, почему. Просто не захотел. Хотя она наверняка сработала бы без проблем. Нужно было лишь смонтировать разделы в точки монтирования и написать в консоли команду sudo cp -a /mnt/XXX /mnt1/XXX (о том, как и что монтировать, скажу ниже) — и далее.
Архиваторы tar и Clonezilla я не стал применять потому, что потребовалось бы куда-то записать архив (лишнее место), а потом его разархивировать.
Остановился я на утилите синхронизации rsync.
Скорее всего, rsync не установлен в системе по умолчанию, значит, надо его установить. Что проще? Соответствующей своей ОС командой установки (apt — Debian, pacman — Arch, yum — RHEL, urpmi — Rosa, zypper — OpenSuse, в общем, каждый должен уже знать, какой командой в его системе устанавливаются программы) устанавливаем rsync. Для Дебиан и всех его производных: sudo apt install rsync. Всё, rsync установлен.
Теперь нужно подготовить новый SSD (если кто-то решил переносить на HDD никакой разницы нет). То есть нужно создать необходимые разделы на диске. Можно воспользоваться консолью или консольными программами cfdisk, parted, но мне в данном случае удобнее использовать графический GParted — так всё нагляднее, меньше шанс сделать ошибку. Поскольку я переносил 3 системы, разбивка была достаточно сложной, но обычно люди пользуются одной ОС, поэтому для простоты я опишу перенос одной ОС.
Итак, запускаем GParted и создаём разделы. Понятно, сперва выбираем свою разметку: MBR или GPT, — затем уже разделы. Можно сделать один общий раздел, можно хоть 5-6 разделов для одной системы, но я обычно делаю три раздела: /boot, /, /home. Но в самом начале диска я оставляю 1-2Мб неразмеченного пространства (для MBR, в GPT нужно размечать немного иначе). Затем создать /boot размером 500МБ — 1Гб в файловой системе ext2, / (корневой раздел) размером от 20 до 50 ГБ (у меня в файловой системе btrfs (самый оптимальный вариант для SSD), но никто не мешает Вам форматировать / в другую ФС: ext4 или reiserfs, кому что больше нравится). И наконец /home, размер которого определяете исходя из возможностей и надобностей. У меня /home 100Гб и тоже в btrfs. И, что бы там ни говорили о том, что производители SSD уже резервируют часть диска для переопределения испорченных ячеек, я всё же оставляю гигабайт 15-20 неразмеченными в конце диска.
Допустим, у Вас получилось так (просто пишу для удобства дальнейшего изложения, конечно, у Вас может быть по-другому; ориентируйтесь на свою разбивку диска):
Поскольку у меня btrfs, и я хочу использовать все возможности этой ФС, теперь я применяю сжатие и создаю подтом:
sudo mount /dev/sdb2 /mnt
sudo btrfs property set /mnt compression zstd (можно использовать сжатие lzo)
Проверяю, что сжатие включено:
sudo btrfs property get /mnt
Увидев, что compression=zstd , создаю подтом
sudo btrfs sub create /mnt/@
Вижу: @, значит, всё в порядке.
Для /home проделываю то же самое, только монтирую, понятно, /dev/sdb3 и создаю подтом @_home.
Теперь смонтируем свой работающий корень в точку монтирования:
sudo mount /dev/sda2 /mnt (для примера, у Вас свой раздел, не обязательно /sda2).
Подготовленный раздел монтирую в другую точку:
sudo mount /dev/sdb2 /mnt1
sudo rsync -avhH /mnt/ /mnt1/@ (перенос всего из /mnt — последний слеш обязателен, внутрь подтома @ в /mnt1).
Если работающая система тоже на ФС btrfs и тоже на подтоме, то команда будет sudo rsync -avhH /mnt/@/ /mnt1/@
Далее то же самое для /home.
Если создали 1 раздел для / и /home на btrfs, то в разделе /dev/sdb2 нужно было создать оба подтома сразу и переносить в каждый соответственно / и /home. Если работающая система, которую переносите, на одном разделе, а нужно перенести на 2 раздела или в 2 подтома одного раздела, команды будут несколько иные:
sudo rsync -avhH —exclude=’/home’ /mnt/ /mnt1/@ (перенос корня с исключением /home в корневой подтом)
sudo rsync -avhH /mnt/home/ /mnt1/@_home (перенос домашнего раздела в подтом домашнего раздела).
Аналогично переносим /boot, только проще, ибо там подтомов нет: смонтировать в точки монтирования исходный и записываемый разделы и
sudo rsync -avhHAX /mnt/ /mnt1 (по этому же типу копируем систему, если и в исходном и в конечном разделе всего 1 раздел, например в ext4).
Перенос файлов завершён. Но новая система, естественно, не запустится, потому что простое копирование файлов не есть установка. Во-первых, в новозаписанной системе неправильно прописано монтирование в файле /etc/fstab, во-вторых, неправильно прописан файл /grub.cfg в /boot, в-третьих, собственно не установлен загрузчик grub2. Будем всё это исправлять.
Смонтируем новый корень в /mnt или через графический Проводник откроем наш /dev/sdb2, найдём файл /etc/fstab, редактируем его. Для этого командой
выясняем UUID наших новых разделов и заменяем или дописываем необходимые разделы для монтирования и их опции (я подробно описывал этот процесс в другой статье «Линукс Минт в BTRFS на SSD» , повторяться не буду). Итак fstab исправлен. Теперь нужно установить grub2 и переписать /boot.
Для этого нужно смонтировать новую систему и войти в неё через chroot. Делается это так (описываю процесс для подтома btrfs):
монтируем корень в точку монтирования:
sudo mount -o subvol=@ /dev/sdb2 /mnt
(для системы без подтома, просто sudo mount /dev/sdb2 /mnt)
Мы должны увидеть список разделов ФС: /bin, /boot, /etc и т. д.
sudo mount -o subvol=@_home /dev/sdb3 /mnt/home
sudo mount /dev/sdb1 /mnt/boot
Монтируем псевдофайловые системы
sudo mount -o bind /sys /mnt/sys
sudo mount -o bind /dev /mnt/dev
sudo mount -o bind /proc /mnt/proc (в Арч Линукс последние три монтирования не требуются)
Приглашение консоли должно измениться. Всё, мы в переписанной системе. Устанавливаем grub2:
grub-install /dev/sdb (загрузчик устанавливается не в раздел, а на диск. Главное, не перепутайте, на какой).
grub-mkconfig -o /boot/grub/grub.cfg или
grub2-mkconfig -o /boot/grub2/grub.cfg (нужно предварительно посмотреть в /boot: если там каталог grub, то первая команда, если grub2 — вторая).
Почти закончили. Осталось выйти из chroot
Отмонтировать все разделы в обратном монтированию порядке:
sudo umount /mnt/proc и далее, до
Всё, можно перезагружаться, выбрав при перезагрузке в BIOS наш новый диск, на который только что установили grub.
Про то, что лучше вынести торренты, загрузки на HDD, а некоторые разделы монтировать в tmpfs, я писал в вышеназванной статье, если нужно, посмотрите её.