Как лучше всего клонировать работающую систему на новый жесткий диск с помощью rsync?

22

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

  • ОС: Ubuntu 12.04.4 LTS
  • Обезглавленный
  • Я не надеюсь установить слишком много нового программного обеспечения, поскольку диск уже выходит из строя :)
  • Система работает. Я боюсь, что остановка увеличит вероятность того, что диск не восстановится. Это значит, что дд может быть?
  • Новый диск не того же размера (он в два раза больше), чем старый, что еще больше усложняет проблему с dd.

Моя идея состояла в том, чтобы

  • горячее подключение нового диска в системе
  • сделать файловую систему
  • смонтировать его в / mnt / somedir
  • rsync файлы
  • немного магии fstab
  • немного магии загрузки

У меня есть еще вопросы:

Что будет хорошей командой rsync? Я планировал:

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(Я пропускаю еще несколько каталогов, например, мой наездник и т. Д.)

Где варианты:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

Я специально пропускаю -H, -v и --progress, чтобы ускорить процесс.
Будет ли это работать для Ubuntu? Я не уверен, использует ли Ubuntu какие-либо жесткие ссылки, но я не думаю, что мне нужна опция, не так ли?

После этого запуска я мог бы перезагрузиться (возможно, с живым USB-накопителем) и повторно запустить rsync, если старый диск все еще запускается. Это исправило бы любые нечитаемые / измененные файлы, потому что система работала, я полагаю.


Как исправить загрузку?
Тогда я планирую изменить UUID для /в моем fstab (все еще придется Google, как найти UUID), и сделать немного магии, чтобы система фактически загружалась с нового диска

Я что-то забыл или я спланировал что-то особенно глупое?

Nanne
источник

Ответы:

16

С помощью команды вы можете получить UUID для всех блочных устройств blkid. (Вы хотите тот, который просто говорит UUID, а не PARTUUID)

Я использую опции rsync: -avhPHAXx.

Я не думаю, что -v или --progress что-либо ускорит, если вы не используете очень медленную консоль / tty.

Использование -x устраняет необходимость во всех ваших исключениях, если они все в разных файловых системах (в моей системе все, кроме lost + found is).

Единственная известная мне программа, которая использует жесткие ссылки (по крайней мере, в моей системе) git, поэтому я добавляю опцию -H. Единственная проблема, которую, я думаю, у вас возникнет, если вы не используете -H, это то, что она займет немного больше места.

Что касается загрузчика, если вы используете GRUB2 с MBR, тогда я использую команду grub-install /dev/sda(замените sda на нужный вам диск). Это должно сделать новый диск загрузочным. Если вы используете другой загрузчик или UEFI, то я бы проверил Google, как правильно загрузить новый диск. Просто помните, что / boot на новом диске должен находиться в том же разделе, что и в настоящее время (при условии, что вы не используете UUID и для / boot), в противном случае вам нужно будет соответствующим образом изменить fstab.

bparker
источник
Я не верю, что они есть в отдельных системах, я боюсь, поэтому исключение кажется благоразумным. Я читаю смешанные вещи о скорости - v, поэтому я не уверен, что там делать;). Git - это хорошая мысль, я уверен, что дома есть кое-что из этого!
Нанн
1
Ну, / proc, / sys и, скорее всего, / dev - это, безусловно, разные файловые системы / точки монтирования из /, поэтому нет абсолютно никаких причин исключать их, когда у вас есть -x. Если вы не уверены, что является частью вашей корневой файловой системы или нет, просто запустите, mountчтобы проверить. Все, что там есть, не нужно исключать вручную.
bparker
Я не уверен, как и почему, но исключения все равно были неправильными. Они на самом деле были на пробежке, я не знал почему. (ну, я скопировал формат из полуслучайного места, так что это может быть причиной?). Как бы то ни было, с твердо установленным -x по вашему совету я не слишком волновался, единственное, что произошло дополнительно, это то, что некоторые неважные вещи (например, старые резервные копии) также были «сохранены».
Нанн
Это спасло меня. Я клонировал 12GB + систему на Linode, чтобы новый узел. Спустя 5 с лишним лет это все еще работает. Спасибо ребята!
geeth
Поэтому при разбиении клонированной файловой системы, готовой к приему клонов, должен ли мой корневой раздел иметь установленный флаг загрузки, пока я держу их в асинхронном режиме, или я должен установить его непосредственно перед запуском клонированного диска. В противном случае я бы предположил, что клонированный диск является загрузочным, что в действительности не требуется. В моей ситуации мой диск-клон - это диск на отдельном сервере. И Rsync используется, чтобы держать его в соответствие с Prod.
новозеландский день
11

Я только что сделал это успешно (после пары попыток).

я использовал

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

Затем я сбрасываю свой /mnt/etc/fstabфайл для загрузочного раздела и места подкачки.

Тогда мне нужно было сбросить GRUB

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub
teeks99
источник
Обратите внимание, что это только для дисков в формате MBR.
Teque5
2

Не пытайтесь исправить загрузку с этого диска; моя рекомендация:

  1. Подключите диск к другой машине, вместо того, чтобы рисковать горячей заменой на неисправной машине.
  2. rsync ваши несистемные файлы на новый диск.
  3. На отдельном жестком диске создайте загрузочный диск, минимальный корень и своп. Установите ту же операционную систему, которую вы хотите клонировать с больного жесткого диска.
  4. Загрузитесь с этого нового диска (в идеале на отдельном компьютере, если вы не можете рисковать временем простоя на целевом хосте, в противном случае вы можете загрузить целевой хост с этого диска).
  5. Добавьте диск из шага № 2 в эту новую систему с правильными точками монтирования. Теперь у вас есть клон системного диска. Вы можете (необязательно) скопировать разделы на этот новый диск, но я рекомендую сохранить диск как минимальное требование для загрузки вашей ОС. Как вы уже поняли, слишком много вещей в основном разделе затрудняет восстановление. Убедитесь, что вы правильно скопировали конфигурацию сети, так как ваш сервер не загружен.
  6. Просто замените диск в больной системе на эту новую пару дисков (если вы решили не загружать цель изначально на шаге № 4).
  7. Перезагружать.
Бурхан Халид
источник
Я могу рискнуть простоем, это несущественный сервер. Я собирался использовать горячую замену (в основном, горячее добавление), потому что эта копия была бы намного быстрее. Я думал, что рисков не должно быть слишком много, так как мы говорим о SATA (по крайней мере, II). Кроме того, что является причиной, чтобы предложить дополнительный загрузочный диск? Разве это не усложнит ситуацию с некоторыми уже установленными программами, домашними каталогами и т. Д.? Звучит как работа, которой я стараюсь избегать: D
Nanne
Это то, что я использую в производстве; Я монтирую / home, / etc, / var, / usr и / opt на внешние диски (на самом деле на LVM) и / и / boot на отдельный диск. Таким образом, мне не нужно беспокоиться, когда основной диск выходит из строя, я просто заменяю его, не затрагивая мои службы :) Изначально это немного трудоемко, но спасает вас в долгосрочной перспективе. Особенно, когда у вас заканчивается свободное место в разделе, и вам нужно добавить том без простоя.
Бурхан Халид
Хотя вы делаете хорошую мысль, это не требование, которое у меня сейчас есть, и не нужно :). В системе есть несколько других дисков (около 7), и я должен где-то провести черту; D. Так что ОС не нуждается в разделении на данный момент. Я имею в виду: я согласен, что система хорошая, но сейчас я не ищу то, что нужно; D. Так что, если я оставлю все это на 1 диске, то факт, что я копирую внешний файл, серьезно замедлится, не так ли?
Нанн
Зависит от вашего интерфейса к внешнему, по Ethernet это должно быть быстрее, по USB 2 быстрее, по USB 3 еще быстрее. Это не сделает его очень медленным - конечно, не копируйте каталоги, в которые пишутся (например, / tmp, которые вам в любом случае не нужны) или куда-то, в которые пишутся каналы.
Бурхан Халид
0

Я провел много времени в дистрибутиве Centos Freepbx для rsync, и у меня есть новый загрузочный диск, и, наконец, после исправления UD UID и fstab и grub он не работает.

Последний шаг, чтобы заставить это работать

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

Когда вы находитесь в Grub CLI (т.е. по grub>приглашению):

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

Нажмите, enterи теперь вы можете завершить работу, удалить старый диск и загрузить новый.

Comdif
источник