Назад | Перейти на главную страницу

Как перенести Linux на другой раздел?

Мне нужно сделать копию работающей системы Linux, которая (содержащаяся в /, а новое место подготовлено в / mnt / sdb5), похоже, содержит значительное количество жестких, программных ссылок и специальных файлов в / dev; бы cpio справиться с этой работой без применения дополнительной магии?

Известные в настоящее время гарантии:

Но все же, не собираюсь терять время только потому, что cpio пропустил какой-то флаг и искалечил разрешения / тип узла / мягкую или жесткую ссылку.

Какой инструмент использовать / каких подводных камней избегать?

Чтобы ответить на актуальный вопрос относительно cpio: Это флаги, которые я бы использовал для cpio:

find / -xdev -depth \! -path ./lost+found -print0 | cpio --pass-through --null --dot --make-directories --unconditional --preserve-modification-time --sparse /mnt/sdb5

Конечно, поскольку вы не копируете по сети, я бы просто использовал cp:

cp --archive --sparse=always --verbose --one-file-system --target-directory=/mnt/sdb5 /

И если вы хотите иметь возможность копировать несколько раз, rsync - лучший выбор из-за его возможностей возобновления. (Это также, как и cp, обрабатывает списки ACL и расширенные атрибуты и может опционально работать по сети, например cpio. Так что это наиболее полезный вариант, за исключением создания первой копии локально, что я предпочитаю делать с помощью cp.)

rsync --archive --inplace --hard-links --acls --xattrs --devices --specials --one-file-system --8-bit-output --human-readable --progress / /mnt/sdb5

Не забывайте копировать /boot и /dev!

/boot легко, просто скопируйте его. Но /dev в настоящее время намного сложнее, так как он скрыт udev. Я рекомендую следующую процедуру:

  1. mkdir /tmp/dev
  2. mount --move /dev /tmp/dev
  3. Копировать /dev к /mnt/sdb5 используя одну из приведенных выше команд
  4. mount --move /tmp/dev /dev
  5. rmdir /tmp/dev

Как упоминалось в @Klox, при копировании разделов одинакового размера я соглашаюсь использовать dd.

Но если вы хотите скопировать диск на другой раздел с другим размером, я бы предпочел rsync. Смонтируйте новый раздел (скажем, / mnt / new) и:

# rsync -a --exclude=/proc --exclude=/dev --exclude=/sys / /mnt/new

Нет дополнительной магии для символических ссылок и нет необходимости в live cd (single user / init 1 подойдет).

Более оптимальный вариант dd использует partimage, копируется только используемый раздел раздела, что делает более целесообразным копирование больших неиспользуемых разделов.

Обратите внимание на важное предостережение:

Partimage НЕ поддерживает Ext4, который используется по умолчанию в новых установках Ubuntu.

Удобная копия находится на Компакт-диск аварийного восстановления системы распространение.

При перемещении установок Linux между жесткими дисками я всегда загружаюсь с Live CD и использую dd чтобы скопировать весь раздел. Я понимаю, что это не касается изменений в размере диска (неизбежно новый диск больше, что упрощает ситуацию), но мне нравится техника именно по тем причинам, по которым вас беспокоит использование cpio: что-то может пойти не так. Используя dd Это все или ничего: либо новый диск загружается и все остается прежним, либо диск не загружается. Нет риска, что скрытые проблемы появятся позже.

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