(Обновление от 2018, 9 декабря: если ваша виртуальная машина имеет режим "восстановления" и доступ к VNC, возможно, существует более простое решение, см. Нижнюю часть сообщения). Оригинальный ответ следует.)
Можно ли выполнить полное восстановление системы на удаленной виртуальной машине с Linux?
Вероятно, да (в большинстве случаев).
Самый простой способ, вероятно, предполагает две перезагрузки, а не одну.
Должно быть возможно сделать это с одной перезагрузкой, но это, вероятно, не стоит дополнительных усилий.
Скажем, удаленная система загружалась как Ubuntu 15.04, затем я восстанавливаю на нее полную систему Ubuntu 18.04, пока Ubuntu 15.04 работает, затем при следующей загрузке система становится Ubuntu 18.04. Является ли это возможным?
Поскольку это удаленная виртуальная машина, я не могу загрузить Live-CD или что-то еще, чтобы я смонтировал диск виртуальной машины, верно?
Если grub2 ваш загрузчик, вы можете сделать следующее:
- Скопируйте действующий файл
.iso
(как файл) в вашу файловую систему.
- Отредактируйте
grub.cfg
для загрузки ядра и инициализации RAM- диска из файла .iso
.
- Перезагрузитесь в живую ОС из
.iso
файла
- Выполните восстановление из живой среды ОС.
- Перезагрузитесь в восстановленную ОС.
(Это также возможно с другими загрузчиками, но я использую grub2.)
Обновление / заключение: восстановление в удаленную виртуальную машину Linux невозможно, потому что невозможно смонтировать и отредактировать диск виртуальной машины напрямую, по крайней мере с Microsoft Azure, который я использую
Если вы перезагрузитесь в живую ISO-среду toram
, вы сможете сделать что-нибудь с диском виртуальной машины.
Кроме того, опция загрузки ядра toram предназначена только для живых ISO/USB, но миграция на новый жесткий диск будет работать. Спасибо @ Xen2050.
Я ожидаю, что миграция на новый диск будет намного проще, если ваш провайдер виртуальных машин позволит вам менять диски. (Мой поставщик виртуальных машин со скидкой предоставляет эту функцию.)
Вот фрагмент grub.cfg
который я использовал для загрузки в файл ISO. Я добавил этот фрагмент в /etc/grub.d/40_custom
, затем запустил update-grub
и перезагрузил компьютер.
menuentry "Lubuntu 18.04.1 Live ISO" {
set isofile="(hd0,gpt4)/path/to/lubuntu-18.04.1-desktop-amd64.iso"
loopback loop $isofile
linux (loop)/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=/path/to/iso/lubuntu-18.04.1-desktop-amd64.iso toram
initrd (loop)/casper/initrd.lz
}
Как ни странно, после загрузки вышеупомянутой файловая система, которая содержит файл .iso
все еще будет подключена. Размонтируйте его следующим образом:
root@lubuntu:~# mount | grep sda
/dev/sda4 on /isodevice type btrfs (rw,relatime,space_cache,subvolid=5,subvol=/)
root@lubuntu:~# umount /isodevice
umount: /isodevice: target is busy.
root@lubuntu:~# losetup -a
/dev/loop1: [0029]:265 (/cdrom/casper/filesystem.squashfs)
/dev/loop0: [0028]:259 (/isodevice/path/to/lubuntu-18.04.1-desktop-amd64.iso)
root@lubuntu:~# losetup -d /dev/loop0
root@lubuntu:~# umount /isodevice
root@lubuntu:~# mount | grep sda
Учитывая, что весь смысл toram
состоит в том, чтобы иметь возможность удалить диск, я нахожу странным, что мне приходится вручную отключать //dev/loop0
и unmount /isodevice
. Я могу сообщить об этом как об ошибке в Ubuntu.
Вышеупомянутый подход предполагает, что вы можете использовать VNC (или эквивалентный) для доступа к виртуальному экрану, клавиатуре и мыши виртуальной машины. Если у вас нет VNC, вам, вероятно, понадобится создать собственный живой ISO-файл, который установит сетевое соединение, чтобы вы могли войти в него по ssh
.
Обновление 9 декабря 2018 года:
Если ваша виртуальная машина имеет режим "восстановления" и доступ к VNC, и если ваша ОС - Ubuntu, то может быть более простой вариант:
- Загрузите виртуальную машину в режим восстановления.
- Используйте режим восстановления, чтобы записать живой файл Ubuntu
.iso
непосредственно в начало диска. (Предупреждение: это перезапишет таблицу разделов, поэтому вы потеряете весь доступ ко всем данным, которые ранее были на диске.)
- Перезагружать.
- Добавление опции
toram
в строке опций , передаваемых ядру при загрузке. (Ubuntu поддерживает toram
. Другие ОС не могут.)
- Действующая система ISO полностью загрузится в ram, и вы сможете полностью переформатировать диск. (При желании вы можете использовать живую среду ISO для выполнения стандартной установки.)
Вот пример команды, которая запишет файл .iso
на диск:
# wget -O - <url_of_iso> | dd of=/dev/sdX