LINUX.ORG.RU
ФорумAdmin

Перенос Linux на другой жёсткий диск


0

1

Задача - перенести системный раздел (тот который монтируется как «/») на другой жёсткий диск (или другой раздел жёсткого диска). В принципе я это уже делал и успешно: грузишься с LiveCD, старый хард монтируешь как /mnt/oldlinux, новый как /mnt/newlinux и в него переходишь, копируешь:

mkdir proc
mkdir sys
cp -ax /mnt/oldlinux/bin .
cp -ax /mnt/oldlinux/boot .
cp -ax /mnt/oldlinux/dev .
cp -ax /mnt/oldlinux/etc .
...
Затем делаешь chroot, редактируешь /etc/fstab, устанавливашь загрузчик и можно грузиться с нового харда.

Вопрос1: Можно ли это делать без LiveCD? То есть копировать с активно используемой файловой системы. На ней же открытые файлы всё-таки есть. Или такая проблема только в маздае существует, а линукс без проблемы позволит скопировать открытый для записи файл? А как же то, что там есть: примонтированные другие файловые системы, символьные ссылки, жёсткие ссылки, информация о принадлежности файлов и каталогов и правах доступа. Какие опции должны быть в cp, чтобы вся эта структура осталась неизменной?

Вопрос2: Можно ли вместо cp использовать tar? Это для случая, когда переносишь не на другой диск/раздел, а в тот же самый раздел когда хочешь сменить скажем ext2 на reiserfs. То есть таришь содержимое, форматируешь раздел в reiserfs и восстанавливаешь. Тут уж конечно да, без LiveCD не обойтись. Опять же вопрос какие опции должны быть в tar, чтобы вся эта структура осталась неизменной?

Вопрос3: Вытекает из второго. Как не перезагружая систему создать бэкап системного раздела?

★★★★★

Можно ли это делать без LiveCD?

LVM @ pvmove

Как не перезагружая систему создать бэкап системного раздела?

Снапшот или R/O.

GotF ★★★★★ ()

Можно ли это делать без LiveCD? То есть копировать с активно используемой файловой системы.

можно, но осторожно - всякие /var итп нужно переносить в однопользовательском режиме

lazyklimm ★★★★★ ()
Ответ на: комментарий от sunny1983

А что непонятно? При использовании LVM можно переносить тома без остановки машины. По второму пункту: можно сделать бэкап со снапшота (LVM, например), либо перемонтировать ФС в read only.

GotF ★★★★★ ()

Перенос на лету вполне возможен. Понятно, что если в этот момент будет обновление системы или работающая СУБД, то получится фигня. Но в обычной системе пишутся только логи, поэтому ничего страшного не происходит. И, в принципе, поубивав все процессы можно перемонтировать корень в read-only.

Относительно копирования через tar есть сложности в RedHat'а, там SeLinux. Поэтому SL 6.0 я переносил с опциями "--selinux --xattrs" от рута, что подразумевает опцию "-p". Обычный, не патченый RedHat'ом tar не знает про selinux и xattrs, но, похоже, что xattrs нужно сохранять и в других дистрибутивах: Перенос системы, tar, права. , то есть использовать star.

Узнать, нужно ли это в вашем дистрибутиве можно с помощью

getfattr -m " -d -R /

Ну, и затаривая файловую систему нужно смотреть, чтобы в архив не попал каталог lost+found, чтобы при распаковки tar не пересоздал его.

mky ★★★★★ ()
Ответ на: комментарий от sunny1983

В работающей системе в консоли дайте команду «telinit 1» и система уйдёт в однопользовательский режим. Корень перемонтировать в ro «mount -o remount,ro /».

А дальше или «cp -a» или «tar ». По поводу tar я писал раньше, что сначала желательно посмотреть, есть ли в системе файлы с расширенными атрибутами (getfattr) и, если есть, потренироваться в создании/распаковки tar-архива так, чтобы эти атрибуты сохранялись.

Я для удобства (чтобы не паковать /dev, /proc /sys) монтирую корень ещё раз «mount /dev/sdXX /mnt/root» и копирию (затариваю) файлы уже из /mnt/root.

Если файловых систем несколько (обычно /boot отдельно), то надо не забывать про это.

mky ★★★★★ ()

mount -o remount,ro /
После этого копируем что нужно.

blackst0ne ★★★★★ ()

У меня был жёсткий диск на 160 Гб, 2 Гб SWAP, 20 Гб ReiserFS, 120 Гб ReiserFS. Переносил всю информацию с него на ext3 с помощью cp -ax. А не с помощью tar.

ZenitharChampion ★★★★★ ()

sunny1983

Вопрос1: Можно ли это делать без LiveCD?

можно в init 1, если у вас смонтирован только небольшой корень с /bin и т.д.

sunny1983

а линукс без проблемы позволит скопировать открытый для записи файл?

позволит. Скорее всего даже правильно...

sunny1983

Можно ли вместо cp использовать tar?

нужно.

sunny1983

Опять же вопрос какие опции должны быть в tar, чтобы вся эта структура осталась неизменной?

как обычно, но следует учесть, что ACL & xattr tar сам сохранять не умеет. Ещё всякие фичи NTFS тоже не умеет.

drBatty ★★ ()
Ответ на: комментарий от mky

mky

но, похоже, что xattrs нужно сохранять и в других дистрибутива

нужно. но есть getfattr -R и getfacl -R, и соответственно setfattr --file=backup.xattr, потому можно обойтись и одним простым tar'ом.

drBatty ★★ ()
Ответ на: комментарий от mky

В работающей системе в консоли дайте команду «telinit 1» и система уйдёт в однопользовательский режим.

Ну да-да, или загрузиться с опцией single. Это я знаю.

А дальше или «cp -a» или «tar ».

Вот какие опции tar меня и интересует. Может кто подсказать, а то сам напутать могу. Вот например почему с cp используют только -a, а как же -P, чтобы симплинки как симплинки копировались, а не разыменовывались, или -x, чтобы каталоги в которых другая файловая система смонтирована (те же /proc, /dev, /sys) пропускались.

sunny1983 ★★★★★ ()

1) можно. лучше если система будет в single user

2) нужно;-) а ещё лучше dump 0af/restore xf

3) mount -o remount,ro /; dump 0af /backup/backup.dump /;mount -o remount,rw /

mumpster ★★★★★ ()
Ответ на: комментарий от sunny1983

Внимательно изучите man по cp, там указано, что -a это -dR --preserve=all, в свою очередь -d это --no-dereference, тоже самое, что -P.

Я копирую каждую файловую систему отдельно, отдельно монтируя её ещё раз в отдельный каталог (допустим /mnt/root), поэтому -x мне не нужен. В принципе, сейчас особого смысла в этом нет, но раньше (во времена devfs) в /dev было несколько файлов, которые тоже нужно было скопировать, и только смонтировав ещё раз можно было получить к ним доступ.

По поводу опций tar сказать не могу, у вас Дебиан, я не знаю, какой там tar. Лучше всего скопировать (через cp или tar) каталоги /bin и /sbin и сравнить права доступа и расширенные атрибуты. То есть сравнить (diff) вывод команд ls и getfattr. Вместо ls можно смотреть вывод find . -printf '%m %s %p\n'

mky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.