Перенос Линукс с 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, я писал в вышеназванной статье, если нужно, посмотрите её.
Перенос Linux на другой компьютер
Хочу поделиться собственным опытом переноса системы на другой компьютер, целиком и полностью отличающийся аппаратной конфигурацией.
На самом деле, вариантов перенести систему много. Каждый имеет свой подход. Я же опишу способ, который больше всего подходит для новичков.
Что имеем
Итак, вот конфигурация моего исходного компа, с установленно ОС:
Материнка: Intel S3200shv
Процессор: Intel Core 2 Duo E8400
Память: 8Гб
Raid 1 ёмкостью 300 Гб
ОС: Fedora 12 i686
Будем для краткости называть его «донором».
Конфигурация компа назначния:
Материнка: Intel Desktop Board D845EBG2
Процессор: Celeron 2ГГц
Память: 512Мб
HDD 160 Гб
Это будет «пациент».
Как видите, системы различаются целиком и полностью. В том числе размеры жёстких дисков. Но в этом нет ничего страшного.
На исходной системе мои разделы имели такой вид:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/dm-6 5.0G 2.5G 2.2G 53% /
/dev/dm-1 194M 55M 130M 30% /boot
/dev/dm-5 4.0G 141M 3.7G 4% /tmp
/dev/dm-3 99G 257M 94G 1% /var/db
/dev/dm-7 2.0G 87M 1.8G 5% /var/log
/dev/dm-2 173G 229M 164G 1% /var/www
В кратком виде алгоритм будет таким:
1. Создать разделы у «донора», как Вы хотите.
2. Установить на комп назначения такую же систему, как на исходном компе.
3. Подключить к исходному компу HDD компа назначения
4. Скопировать файлы из разделов «донора» в разделы «пациента».
Многие вместо второго шага правят разделы вручную. Я предлагаю установку, поэтому этот способ как мне кажется, проще и универсальнее. Чтобы Вы не мучились с переустановкой загрузчика и правкой /etc/fstab.
Шаг первый
Я размечал свой HDD с помощью загрузочного диска pmagic. Удобно и наглядно.
Разделы я создавал «один-в-один» как и на исходном компе, только меньше размером, т.к. HDD «пациента» меньше.
Шаг второй
Установка Fedora на подготовленный HDD прошла быстро и без проблем. Правда, сначала не мог запустить её в графическом режиме, т.к. стояла планка только в 256 Мб. Пришлось заменить на 512 и процесс пошёл.
Шаг третий
Для начала советую провести у «донора» небольшую подготовку. Это установить kudzu:
yum install kudzu
На всякий случай с помощью dd создать бэкап исходной системы. Мало ли, вдруг что-то напутаете при копировании файлов из-за невнимательности?
Далее, выключаем оба компа, подключаем к «донору» винчестер HDD, на который мы только что установили такую же систему. Загружаемся с LiveCD.
Шаг четвёртый
Заходим в консоль, под рутом создаём 2 директории: /mnt/donor/ и /mnt/pacient/. Внутри каждой директории я создал поддиректории, и туда смонтировал разделы HDD «донора» в /mnt/donor/, а разделы HDD «пациента» в /mnt/pacient/.
Теперь можно начать копировать файлы. Но прежде, очень важное замечание! Есть некоторые исключения, которые не нужно копировать от «донора»! Создадим где-нибудь файл exclude_list, содержащий эти исключения:
/etc/fstab
/boot/grub/grub.conf
/proc
/sys
/dev
/mnt
/media
А теперь копируем файлы с пом. команды:
rsync -xrlptgoEv —progress —exclude-from=/путь/до/exclude_list /путь/откуда/копируем/ /путь/куда/копируем/
Аналогично выполняем вышеприведённую команду для всех смонтированных разделов. Только обязательно в конце «/путь/откуда/копируем/» указывайте слеш.
Перезагружаемся.
У меня после перезагрузки система стартовала без проблем. В логах ни на что не ругалась. Единственное, что пришлось сделать, это подредактировать файл /etc/sysconfig/network-scripts/ifcfg-eth0, т.к. скопировался MAC-адрес с компа «донора». Ну и автозагрузка программ исправил с помощью ntsysv.
Было бы классно, если бы с виндой можно было проделать такой же фокус.