20

У меня есть система, работающая как сервер, который имеет сбой жесткого диска. В то время как все важные данные находятся на 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 ответа4

14

Вы можете получить 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.

9

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

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

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
2

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

  1. Подключите диск к другой машине, вместо того, чтобы рисковать горячей заменой на неисправной машине.
  2. rsync ваши несистемные файлы на новый диск.
  3. На отдельном жестком диске создайте загрузочный диск, минимальный корень и своп. Установите ту же операционную систему, которую вы хотите клонировать с больного жесткого диска.
  4. Загрузитесь с этого нового диска (в идеале на отдельной машине, если вы не можете рисковать простоем на целевом хосте, иначе вы можете загрузить целевой хост с этого диска).
  5. Добавьте диск из шага № 2 в эту новую систему с правильными точками монтирования. Теперь у вас есть клон системного диска. Вы можете (опционально) скопировать разделы на этот новый диск, но я рекомендую сохранить диск как минимальное требование для загрузки вашей ОС. Как вы уже поняли, слишком много вещей в основном разделе затрудняет восстановление. Убедитесь, что вы правильно скопировали конфигурацию сети, так как ваш сервер не загружен.
  6. Просто замените диск в больной системе на эту новую пару дисков (если вы решили не загружать цель изначально на шаге № 4).
  7. Перезагружать.
0

Я провел много времени в дистрибутиве Centos Freepbx для rsync, и у меня есть новый загрузочный диск, и, наконец, после исправления UbuID 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, и теперь вы можете завершить работу, удалить старый диск и загрузить новый.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .