Как лучше всего клонировать работающую систему на новый жесткий диск с помощью rsync?
У меня есть система, работающая как сервер, который имеет сбой жесткого диска. В то время как все важные данные находятся на 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 (все еще приходится гуглить, как найти uuid), и сделать немного магии, чтобы система фактически загружалась с нового диска
Я что-то забыл или я спланировал что-то особенно глупое?
4 ответа
Вы можете получить 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.
Я только что сделал это успешно (после пары попыток).
я использовал
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
Не пытайтесь исправить загрузку с этого диска; моя рекомендация:
- Подключите диск к другой машине, вместо того, чтобы рисковать горячей заменой на неисправной машине.
rsync
ваши несистемные файлы на новый диск.- На отдельном жестком диске создайте загрузочный диск, минимальный корень и своп. Установите ту же операционную систему, которую вы хотите клонировать с больного жесткого диска.
- Загрузитесь с этого нового диска (в идеале на отдельном компьютере, если вы не можете рисковать временем простоя на целевом хосте, в противном случае вы можете загрузить целевой хост с этого диска).
- Добавьте диск из шага № 2 в эту новую систему с правильными точками монтирования. Теперь у вас есть клон системного диска. Вы можете (необязательно) скопировать разделы на этот новый диск, но я рекомендую сохранить диск как минимальное требование для загрузки вашей ОС. Как вы уже поняли, слишком много вещей в основном разделе затрудняет восстановление. Убедитесь, что вы правильно скопировали конфигурацию сети, так как ваш сервер не загружен.
- Просто замените диск в больной системе на эту новую пару дисков (если вы решили не загружать цель изначально на шаге № 4).
- Перезагружать.
Я провел много времени в дистрибутиве 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, и теперь вы можете завершить работу, удалить старый диск и загрузить новый.