Вы находитесь на странице: 1из 8

Часто бывает нужно уже настроенную операционную систему Linux перенести на другой диск

вместе со всеми рюшечками, бубенчиками и свистульками. Перенести Linux с одного диска на


другой довольно просто, но тут есть несколько моментов, чему данная записка дебианщика и
посвящена.

Геометрия дисков источника и приёмника совпадает


Если геометрия жёсткого диска с Linux и нового диска одинаковая (новый винчестер на
компьютере точно такой же), то можно использовать наш любимый старый-добрый dd.
Для этого залогиниваемся как root (или используем sudo) и пишем в консоли:

# dd if=/dev/sda of=/dev/sdb
здесь

/dev/sda : диск-источник (с настроенной системой)


/dev/sdb : диск-приемник (на который копируем систему).
Для ускорения процесса можно задать копирование большими блоками вот так:

# dd if=/dev/sda of=/dev/sdb bs 1048576

По окончании копирования диск-приёмник готов к употреблению - разве что можно создать на нём
другого пользователя или отредактировать уже имеющегося (о чём см. ниже). Кстати, если
вместо /dev/sdb указать обычный файл вроде linux.img, то мы получим образ диска c Linux и можем
использовать его для работы в виртуальных машинах.

Разная геометрия дисков источника и приёмника


Это приведёт к тому, что предыдущий вариант будет неэффективен и нам срочно нужен
инновационный прорыв. К счастью, это потребует лишь несколько простых телодвижений, так что
мы сейчас прорвёмся и отчаянно ворвёмся в наше светлое линуксовое счастье.

1. Разметка винчестера и создание файловой системы


Для создания таблицы разделов в Linux используем команду cfdisk (есть подробное описание по
разметке дисков в Linux):

Проверяем исходные данные sda командой fdisk:

fdisk -l /dev/sda

Получаем:

Disk /dev/sda: 250.1 GB, 250059350016 bytes


255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00092797

Device Boot Start End Blocks Id System


/dev/sda1 * 1 12 96358+ 83 Linux
/dev/sda2 13 498 3903795 82 Linux swap / Solaris
/dev/sda3 499 30401 240195847+ 83 Linux

Необходимо создать подобную sda на sdb разметку:


Разметка должна быть схожей с начальным диском sda1 sda2 sda3 … и подходящей под нужный
размер нового.
cfdisk /dev/sdb

Нажимаем на New, создать раздел. Выбираем Primary (основной),


Размер выделяем 99 мб
когда он создастся, нажимаем Bootable (если нужно, чтобы он был загружаемый).
Размер выделяем 99 мб

Так же создаем sdb2


Нажимаем на New, создать раздел. Выбираем Primary (основной),
Размер выделяем 4096 мб (соответственно установленной памяти 4гб)
Нажимаем Type выбираем Linux swap /Solaris (82)

Так же создаем sdb3


Нажимаем на New, создать раздел. Выбираем Primary (основной), Размер - оставшееся место.

/dev/sdb1
/dev/sdb2 #для swap
/dev/sdb3

Проверяем есть ли в /dev созданные cfdisk разделы

ls /dev/sd*

Если есть то форматируем в ext3

mkfs -t ext3 /dev/sdb1


mkfs -t ext3 /dev/sdb3

Если нет , Перезагружаемся, проверяем и фоматируем оставшиеся sdb3,


но не трогаем форматированием sdb2 #swap, он уже готов.
Проверяем

fdisk -l /dev/sdb

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes


255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System


/dev/sdb1 * 1 12 96358+ 83 Linux
/dev/sdb2 13 510 4000185 82 Linux swap / Solaris
/dev/sdb3 511 121601 972663457+ 83 Linux

Перезагружаемся для проверки.


reboot
ls /dev/sd*

Проверяем точки монтирования


pico /etc/fstab
2. Перенос Linux на другой диск или раздел
Например, диск-источник, на котором хранятся все файлы, это /
Теперь монтируем диск-приёмник куда-нибудь в укромное место (чтобы данные рекурсивно не
копировались), например в пустующий в Debian каталог /srv

Отмонтируем куда был примонтирован новый диск

umount /home2

Монтируем основной раздел sdb3


В srv/, переходим и создаем папку boot для монтирования sdb1
Копируем основные папки и пользователей из home

mount -t auto /dev/sdb3 /srv


cd /srv
mkdir boot
mount -t auto /dev/sdb1 /srv/boot
cd /
cp -a boot/ /srv
cp -a bin/ /srv
cp -a etc/ /srv
cp -a lib/ /srv
cp -a sbin/ /srv
cp -a initrd/ /srv
cp -a initrd.img /srv
cp -a lost+found/ /srv
cp -a opt/ /srv
cp -a root/ /srv
cp -a sbin/ /srv
cp -a media/ /srv
cp -a selinux/ /srv
cp -a tmp/ /srv
cp -a usr/ /srv
cp -a var/ /srv
cp -a vmlinuz /srv
cp -a vmlinuz.old /srv
cp -a initrd.img.old /srv
cp -a cdrom /srv
cp -a aquota.group /srv
cp -a aquota.user /srv
cd /srv
ls

3. Досоздаем каталоги: /dev /proc /srv /sys /mnt


Копировать эти каталоги НЕ НАДО, просто досоздаём пустые каталоги /dev /proc /srv /sys /mnt Это
всё псевдо-файловые системы (кроме /mnt естественно).

mkdir dev proc srv mnt sys


ls /

mkdir ./home
mkdir ./home2
ls
cd /
cd /home

ls
cp -a www/ /srv/home/
cp -a xserver/ /srv/home/
cp -a mysql/ /srv/home/

Стоит поменять /srv/etc/fstab на предмет монтирования корневого каталога - если новый диск будет
определён как /dev/sda1, а в файле /etc/fstab будет указан /dev/hda1, ядро этому не обрадуется и не
загрузится (что не страшно при использовании загрузчика grub).
Вносим изменения в /srv/etc/fstab новой системы на предмет подключения swap-разделов или
файлов.
После этого осталось только установить загрузчик Linux.
Перезагружаемся для загрузки с Life CD usb

4. Установка загрузчика Linux


Это довольно просто сделать, загрузившись хотя бы с Life CD usb.
Здесь /dev/sdb это новый диск-приёмник (на который копируем систему). можно установить
загрузчик с помощью chroot:
Сначала монтируем снова новый диск и загрузочный boot
mount -t auto /dev/sdb3 /srv
mount -t auto /dev/sdb1 /srv/boot

Что бы появились файлы устройств в /dev окружении нового sdb


mount --bind /dev /srv/dev
mount --bind /proc /srv/proc

Переходим в новый диск chroot и устанавливаем grub


chroot /srv
grub-install /dev/sdb

Installation finished. No error reported.


This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install’.
(hd0) /dev/sda
(hd1) /dev/sdb

Если все прошло, то выходим и отмонтируем все


exit
umount /srv/dev
umount /srv/proc
umount /srv/boot
umount /srv

Можно выключить машину и физически переставить диски новый и старый местами, либо
переподключить, поменяв местами разъемы SATA.
Подключаем swap

serv:/# mkswap /dev/sda2

Setting up swapspace version 1, size = 4000180 KiB


no label, UUID=5a4d7374-6298-48ea-95fb-bc0143793d10

serv:/# swapon –a

Проверяем top
serv:/# top
top - 18:04:47 up 1 day, 7:23, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 162 total, 1 running, 159 sleeping, 2 stopped, 0 zombie
Cpu(s): 6.0%us, 4.6%sy, 0.0%ni, 89.3%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 3363184k total, 3090232k used, 272952k free, 506680k buffers
Swap: 4000176k total, 0k used, 4000176k free, 2145872k cached

# /etc/fstab: static file system information.


#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/sda3 / ext3 defaults,errors=remount-ro,usrquota,grpquota
0 1
/dev/sda1 /boot ext3 defaults 0 2
/dev/sdb1 /home2 ext3 defaults 0 2
/dev/sda2 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
none /proc/bus/usb usbfs defaults 0 0

(hd0) /dev/sda
(hd1) /dev/sdb

## ## End Default Options ##

title Debian GNU/Linux, kernel 2.6.32-5-686


root (hd0,0)
kernel /vmlinuz-2.6.32-5-686 root=/dev/sda3 ro
initrd /initrd.img-2.6.32-5-686

title Debian GNU/Linux, kernel 2.6.32-5-686 (single-user mode)


root (hd0,0)
kernel /vmlinuz-2.6.32-5-686 root=/dev/sda3 ro single
initrd /initrd.img-2.6.32-5-686

title Debian GNU/Linux, kernel 2.6.26-2-686


root (hd0,0)
kernel /vmlinuz-2.6.26-2-686 root=/dev/sda3 ro
initrd /initrd.img-2.6.26-2-686

title Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode)


root (hd0,0)
kernel /vmlinuz-2.6.26-2-686 root=/dev/sda3 ro single
initrd /initrd.img-2.6.26-2-686

title Debian GNU/Linux, kernel 2.6.18-6-686


root (hd0,0)
kernel /vmlinuz-2.6.18-6-686 root=/dev/sda3 ro
initrd /initrd.img-2.6.18-6-686

title Debian GNU/Linux, kernel 2.6.18-6-686 (single-user mode)


root (hd0,0)
kernel /vmlinuz-2.6.18-6-686 root=/dev/sda3 ro single
initrd /initrd.img-2.6.18-6-686

### END DEBIAN AUTOMAGIC KERNELS LIST

Дистрибутивы > Debian

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

И так имеем:

Установленную систему на диск объемом 80 Гб (второй канал SATA — sdb). На диске одна
пратиция /deb/sdb1, swap у системы отсутствует.

Необходимо сделать:

перенести систему на другой винчестер объемом 320 Гб, подключенный на первый канал SATA
(sda), создать и подключить на новом винчестере раздел подкачки swap, каталоги пользователей
разместить так же на отдельном разделе.

Поехали:

Выключаем компьютер (система установлена на винчестере в партицию sdb1)


Подключаем второй винт на первый канал SATA (винт приемник — sda)
Грузимся с LiveCD
Запускаем Gparted и создаем партиции, которые в дальнейшем будем использовать для SWAP, / и
home
SWAP — 4 Gb, FS — SWAP (sda1)
/ — 40 Gb (sda2), FS — ext4 //* Важно!!! Сделать партицию bootable
home — 251 Gb (sda3), FS — ext4

Далее: открываем терминал и создаем в директории /mnt поддиректории:


sudo mkdir /mnt/oldsys
sudo mkdir /mnt/newsys
sudo mkdir /mnt/newhome

Монтируем партиции на созданные директории


sudo mount /dev/sdb1 /mnt/oldsys # для монтирования корневого раздела старого винта
sudo mount /dev/sda2 /mnt/newsys # для монтирования корневого раздела нового винта
sudo mount /dev/sda3 /mnt/newhome # для монтирования раздела на новом винте, который будет
использоваться под /home

Копируем данные из директории /mnt/oldsys/home в /mnt/newhome, те же действия необходимо


выполнить и для /mnt/oldsys, только теперь из процесса копирования нужно будет исключить
директорию /mnt/oldsys/home, так-как копия этой директории была сделана до этого. Для этого я
использовал утилиту rsync:
sudo rsync -qaHEAXh --progress /mnt/oldsys/home/* /mnt/newhome
sudo rsync -qaHEAXh --progress --exclude 'home' /mnt/oldsys/* /mnt/newsys

Следующим номером нашей программы будет правка файла /etc/fstab: по умолчанию в fstab вместо
имен файловых систем (на пример: /dev/sdb1) используются их UUID, если не планируется
подключать диск к разным SATA каналам или переносить его на другой компьютер, то можно явно
прописать имя файловой системы, в нашем случае выглядеть это будет так:

proc /proc proc defaults 0 0


/dev/sda1 swap swap defaults 0 0
/dev/sda2 / ext4 errors=remount-ro 0 1
/dev/sda3 /home ext4 defaults,owner,nodev 0 2

В противном случае, если требуется использовать UUID, то его можно получить с помощью
утилиты blkid:
sudo blkid /dev/sda2

/dev/sda2: UUID="e681c419-5ba5-4b78-ac00-def757e65585" TYPE="ext4"

Теперь необходимо перенести grub, так-как в ubuntu 9.10 используется grub 2 перенос происходит
несколько иным путем нежели старый груб:
Перед установкой груба я сделал следующие шаги (не обязательно)
Размонтировал /mnt/oldsys:
sudo umount /mnt/oldsys
Размонтировал /mnt/newhome:
sudo umount /mnt/newhome

Далее с помощью команды mount следует сделать перемонтирование каталогов /dev и /proc в
каталоги /mnt/newsys/dev и /mnt/newsys/proc соответственно, используя при этом опцию –bind —
это нужно для того чтобы в окружении chroot в директории /dev имелись файлы
устройств /dev/sda*:
sudo mount --bind /dev /mnt/newsys/dev
sudo mount --bind /proc /mnt/newsys/proc

Чрутимся в /mnt/newsys/
sudo chroot /mnt/newsys /bin/bash
Создаем device.map для grub
sudo grub-mkdevicemap
В результате выполнения этой команды в /boot/grub/ будет создан файл device.map следующего
содержания (на разных системах будет выглядеть по разному) у меня так:

(hd0) /dev/sda
(hd1) /dev/sdb

Создаем кофигурационный файл для grub


grub-mkconfig > /boot/grub/grub.cfg
Если ошибок не вылезло и груб сказал примерно следуюущее

Generating grub.cfg…
Found linux image: /boot/vmlinuz-2.6.31-17-generic
Found initrd image: /boot/initrd.img-2.6.31-17-generic
Found linux image: /boot/vmlinuz-2.6.31-16-generic
Found initrd image: /boot/initrd.img-2.6.31-16-generic
Found linux image: /boot/vmlinuz-2.6.31-15-generic
Found initrd image: /boot/initrd.img-2.6.31-15-generic
Found linux image: /boot/vmlinuz-2.6.31-14-generic
Found initrd image: /boot/initrd.img-2.6.31-14-generic
Found memtest86+ image: /boot/memtest86+.bin
done

Устанавливаем grub. Так-как у меня в системе загрузочным диском будет выступать /dev/sda, то и
устанавливаю я загрузчик в mbr этого винта:
sudo grub-install /dev/sda
(здесь вместо /dev/sda можно поставить hd0 см. файл /boot/grub/device.map).
Вывод этой команды для моей системы такой:

Installation finished. No error reported.


This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install’.
(hd0) /dev/sda

(hd1) /dev/sdb

Уходим из чрута
exit
Делаем umount для /dev, /proc и /mnt/newsys
sudo umount /mnt/newsys/dev
sudo umount /mnt/newsys/proc
sudo umount /mnt/newsys/
Перезагружаемся, если все сделано правильно, то система должна загрузится без проблем.