Еще один способ переноса LINUX на другой винчестер | ||
Разное > Тюнинг Когда-то давным давно в далекой-далекой галактике мне понадобилось перенести мою систему linux с одного винчестера на другой, а пользоваться проприетарщиной ужас, как не хотелось. Погуглив и поискав с помощью других поисковиков я нашел для себя решение, которое линукс-админу может показаться смешным, а меня оно тогда здорово выручило.
Первое, что нам необходимо сделать — это разметить новый жесткий диск в соответствии с желаниями и, возможно, исключив ошибки предыдущей разметки (если на исходном диске что то не нравится). Разберем на конкретном примере моей системы. Я собираюсь перенести систему с HDD=80Gb на HDD=20Gb. Мой диск, объемом 80Gb размечен следующим образом: /dev/hda1 — /boot (250 Mb) /dev/hda2 — swap (1Gb) /dev/hda3 — extended (20Gb) (включает в себя /dev/hda5, /dev/hda6, /dev/hda7, /dev/hda8) /dev/hda5 — / (5Gb) /dev/hda6 — /tmp (512Mb) /dev/hda7 — /usr (10Gb) /dev/hda8 — /var (5Gb) /dev/hda4 — /home (54Gb) /home очень сильно забит информацией, потому его в клонирование я не включаю. Выставив перемычки как положено, я подключаю новый HDD в систему. Он принял метку hdb Можно разметить его с помощью ЛЮБОЙ удобной для вас утилиты. Мне было проще воспользоваться GPARTED — так визуально понятнее, да и видно там сразу, сколько реально места занято данными на той или иной партиции, что поможет определить стоит ли выделять столько много (или мало) места. Я разметил новый диск (/dev/hdb) следующим образом: /dev/hdb1 — /boot (250 Mb) /dev/hdb2 — swap (1Gb) /dev/hdb3 — extended (14Gb) (включает в себя /dev/hdb5, /dev/hdb6, /dev/hdb7, /dev/hdb8) /dev/hdb5 — / (1Gb) /dev/hdb6 — /tmp (512Mb) /dev/hdb7 — /var (5Gb) /dev/hdb8 — /usr (7Gb) /dev/hdb4 — /home (4Gb) Следующим шагом надо подмонтировать все созданные разделы на новом HDD к существующей системе. Для этого на существующей системе я создал директорию /backup, в которой создал поддиректории /boot, /root, /var, /usr (/tmp — не надо), в соответствии с разделами на которые я разделил новый HDD. Далее осуществляем само монтирование: sudo mount /dev/hdb1 /backup/boot sudo mount /dev/hdb5 /backup/root sudo mount /dev/hdb7 /backup/var sudo mount /dev/hdb8 /backup/usr Вот и подобрались к самому интересному, но отнюдь не самому простому месту, к копированию данных. В отличии от Windows Linux позволяет скопировать себя ПОЛНОСТЬЮ. Но надо помнить один важный момент — в системе есть аттрибуты на директории и файлы, а так же симлинки и хардлинки. Так вот необходимо так скопировать систему, чтоб все эти связи не растерялись. Для такой процедуры, по мнению больших специалистов, лучше всего подходит команда tar. Смысл в том, что мы НЕ БУДЕМ архивировать файлы на диск, а будем их переносить через так называемую «трубу» или «поток» на приемный HDD. Для упрощения процедуры переноса я написал скрипт backup.sh: #!/bin/sh cd / tar -cf - dev initrd.img opt srv bin cdrom etc initrd lib sbin sys vmlinuz | (cd /backup/root; tar -xvpf -) cd /boot tar -cf - * | (cd /backup/boot; tar -xvpf -) cd /var tar -cf - * | (cd /backup/var; tar -xvpf -) cd /usr tar -cf - * (cd /backup/usr; tar -xvpf -) немного объясню, что к чему: «cd /» — переход в root «tar -cf — dev initrd.img opt srv bin cdrom etc initrd lib sbin sys | (cd /backup/root; tar -xvpf -) » — заtarивание перечисленных директорий и файлов с передачей их на расtarивание на приемный HDD. Узнать какие директории и файлы надо переносить несложно. Просто выполните команду «ls /» тем самым получив листинг вашей системы начиная с /. В моем случае это: ls / backup boot dev home initrd.img media opt root srv tmp var bin cdrom etc initrd lib mnt proc sbin sys usr vmlinuz Из всего этого «добра» нам нужно выделить то что будет находиться в /. Так, как я выделил отдельные партиции на диске под /boot, /var, /tmp, /usr и /home, получается что их на данном шаге нужно пропустить. Следовательно берем только dev initrd.img opt srv var bin cdrom etc initrd lib sbin sys vmlinuz А с остальными проще: cd /boot — заходим в существующий /boot tar -cf - * | (cd /backup/boot; tar -xvpf -) переносим все содержимое /boot в /backup/boot и т.д. Итак запускаем скрипт backup.sh и идем отдыхать на некоторое время. У меня все заняло около 10 минут. Теперь еще один важный момент на который я вначале не обратил внимание, за что поплатился лишним временем и головной болью. НЕДОСТАТОЧНО просто скопировать данные на партиции /var, /tmp, /usr. После всех процедур переноса нам необходимо СОЗДАТЬ эти директории на приемном диске, как точки монтирования тех самых партиций (и все те точки монтирования, которые мы исключили при переносе — /home, /media, /tmp, /var, /mnt, /proc, /usr) ОБЯЗАТЕЛЬНО С ТЕМИ ЖЕ аттрибутами! То есть: sudo mkdir /backup/root/home sudo mkdir /backup/root/media sudo mkdir /backup/root/tmp sudo mkdir /backup/root/var sudo mkdir /backup/root/mnt sudo mkdir /backup/root/proc sudo mkdir /backup/root/usr какие выставить аттрибуты на директории можно узнать набрав команду ls -la / на исходной системе. Но кроме /tmp везде должен быть владелец root группа root и права 766. На /tmp надо поставить права 777. Теперь надо на приемном HDD поправить fstab, если необходимо (если вдруг вы СОВСЕМ ПО ДРУГОМУ разметили диск). А так же поправить menu.lst загрузчика GRUB. В UBUNTU что в fstab, что в menu.lst все диски прописаны через UUID а не просто /dev/hda. узнать какой у вашего диска UUID можно с помощью команды: ls -l /dev/disk/by-uuid, на выводе должно получиться что то вроде: lrwxrwxrwx 1 root root 10 2008-02-17 17:45 11815c66-5ae7-4497-9039-51de9adef664 -> ../../hda2 lrwxrwxrwx 1 root root 10 2008-02-17 17:45 78711a48-6776-4474-8fa8-87016aad83a2 -> ../../hda6 lrwxrwxrwx 1 root root 10 2008-02-17 17:45 83fded3d-37c4-4d85-a965-a7bbe326178a -> ../../hda7 lrwxrwxrwx 1 root root 10 2008-02-17 17:45 a60e482c-8260-48fb-a19e-f5f906d4d444 -> ../../hda8 lrwxrwxrwx 1 root root 10 2008-02-17 17:45 bc7607fe-3bf2-4bc1-adce-8ab749a271c9 -> ../../hda1 lrwxrwxrwx 1 root root 10 2008-02-17 17:45 cacd40ea-ac88-4143-b5d9-5cb477eeb85d -> ../../hda4 lrwxrwxrwx 1 root root 10 2008-02-17 17:45 d4404ea9-0a8e-4a4c-b72d-10a5edd697be -> ../../hda5 вот нам нужны как раз цифры «11815c66-5ae7-4497-9039-51de9adef664», к примеру. Это UUID партиции swap (в моем случае). в menu.lst правим следующие строки: # kopt=root=UUID=d4404ea9-0a8e-4a4c-b72d-10a5edd697be ro (не смотрите что строка закомментирована, при обновлении ядра именно отсюда берется информация) kernel /vmlinuz-2.6.22-14-generic root=UUID=d4404ea9-0a8e-4a4c-b72d-10a5edd697be ro quiet splash locale и kernel /vmlinuz-2.6.22-14-generic root=UUID=d4404ea9-0a8e-4a4c-b72d-10a5edd697be ro single Не забудьте тот факт, что хоть система и скопирована на диск, но она пока не умеет загружаться, потому что мы не установили загрузчик. Делается это просто: Берем установочный диск UBUNTU и грузимся. переходим в консоль ctrl+f1 sudo su grub find /grub/stage1 root (hd0,0) сюда пишем то что выдала предыдущая команда setup (hd0) сюда пишем то же самое но до первой запятой. quit Все — отсединяем диск от системы, подключаем, проверяем. У меня все заработало. ЗЫ! Так как я не переносил /home — то система ругнулась на то что я как пользователь есть а вот домашней папки у меня нет. Я поступил варварским способом — userdel %username%, а затем adduser %username%. Просто мне было НЕВАЖНО. И лень расставлять аттрибуты. А таким образом система сделала все за меня. P.S. Не ругайте сильно за, возможно, устаревший способ, но на тот момент он работал и работал хорошо! (Тот момент можете вычислить по версии ядра упомянутого в этой статье). Источник: http://habrahabr.ru/blogs/linux/128095/ |
||
Комментарии | ||