Переезд форума на новый сервер

Автор АЛьФ, 13 февраля 2025, 10:51

« назад - далее »

АЛьФ

Вроде как переезд состоялся и все заработало. Может быть еще будут перезагрузки для настройки всяких ништяков моей внутренней кухни.


ВНИМАНИЕ! Работы по переезду начнутся сегодня вечером. Сервер будет отключен до окончания работ. Надеюсь, что завтра к вечеру уже всё запущу на новом месте.
Но в любом случае сохранность веток и постов до конца этой недели не гарантируется.

На данный момент все мои сайты и форум крутятся на сервачке, сердцем которого является старичок "Intel(R) Atom(TM) CPU D410 @ 1.66GHz". Вертится все под Ubuntu. В принципе справляется, стоит себе на полочке и не жужжит. Но хочется же движухи.
И вот решил я устроить новоселье всему своему хозяйству. Заказал мини-пк на Intel N100. Приехать должен из братского Китая в начале марта.
План примерно такой:
- Накатить на новый мини ту же Ubuntu Server
- Настроить виртуальную машину на KVM
- Переселить в эту виртуалку текущий сервер

Все должно заработать без переустановки и перенастройки. Виртуалку давно хочу, чтобы упростить резервное копирование и восстановление в случае сбоя (т-т-т). У нас так на работе сервера сделаны и очень мне это дело нравится.

Теперь проблема. Она в том, что сейчас вся система занимает 19 Гб на диске 256 Гб. На новом мини диск так же будет 256 Гб. Делать полный посекторный img существующего диска явно не вариант. Только в качестве промежуточного этапа. Хочется на виртуалке сделать диск 32 Гб максимум, чтобы упростить то же резервное копирование. Да и вообще че он.
И вот как перенести с физического сервера в виртуальный с уменьшением размера диска без необходимости все заново переустанавливать я не понимаю.
Пока мысль дошла только до того, чтобы сделать на промежуточный диск полный img, его подключить к виртуалке и уже на нем сокращать размер раздела и всего диска. Получится ли?
С увеличением размера я сталкивался, а вот с уменьшением только при переносе этой же системы с HDD на SSD. Но и там я в итоге тупо все переставил и настроил заново (тогда форума еще не было и проще с переустановкой было).

Если кто поделится опытом, буду благодарен.

Djelf

Возился с таким... Справилась только https://clonezilla.org/downloads.php
Все виндовые приблудуды - в топку! Ни одна не смогла...
Но я переносил nvme на nvme, но чтобы потом все завелось, пришлось их передергивать местами, но это уже хинт...

У тебя задача перенести образ физического диска linux в образ виртуального диска. Я правильно понял?
Вроде и это, эта штука умеет: https://jlorenzen.blogspot.com/2010/07/restoring-clonezilla-image-using.html



АЛьФ

Цитата: Djelf от 13 февраля 2025, 21:56У тебя задача перенести образ физического диска linux в образ виртуального диска. Я правильно понял?

Да, все правильно. Но основная фишечка - надо уменьшить диск. Судя по всему, придется делать это разными задачами.
На Clonezilla я уже смотрел. Но мне кажется, что это все же слишком большой инструмент для моей задачи. Пока думаю попробовать сделать с помощью команды dd полный образ диска, подключить его к виртуальной машине и порезать.
Есть еще инструмент, который прям на горячую переносит физический сервер на виртуалку - virt-P2V. Читаю про него. В принципе, у меня ж не такой сервер, чтобы поддерживать его непрерывную работу. Можно на пару дней и загасить.

ЯнСмит

Привет, Acronis Backup & Recovery Server for Linux думаю справится

АЛьФ

Цитата: ЯнСмит от 14 февраля 2025, 09:18Привет, Acronis Backup & Recovery Server for Linux думаю справится

Платное решение. И, насколько я понимаю, сейчас уже как-то иначе программный комплекс называется.

Djelf

Про необходимость урезания объема диска я как-то пропустил...
Уж ты, зараза... скормил deepseek вопрос
Цитата: АЛьФ от 13 февраля 2025, 10:51Теперь проблема. Она в том, что сейчас вся система занимает 19 Гб на диске 256 Гб. На новом мини диск так же будет 256 Гб. Делать полный посекторный img существующего диска явно не вариант. Только в качестве промежуточного этапа. Хочется на виртуалке сделать диск 32 Гб максимум, чтобы упростить то же резервное копирование. Да и вообще че он.
И вот как перенести с физического сервера в виртуальный с уменьшением размера диска без необходимости все заново переустанавливать я не понимаю.
Ответ выглядит работоспособным и очень подробным.
Кожаные мешки изрядно потрудились в генерации контента для обучения подобных ботов и становятся нужны только когда бот бредит, но в ответе я этого не заметил.

Arbuz

О, апгрейд! Это круто!
В линуксе нет таких проблем и заморочек с копирование образов, посекторным копированием. Это избыточно. dd это как из пушки по воробьям. Просто создаёшь необходимую разметку, потом rsync'ом копируешь файловую систему. Всё.
Вариантов на само деле гораздо больше чем под виндой. Можно и удалённо делать. Кстати, у той же клонзиллы под капотом не что иное, как rsync.
ЗЫ: Это касается и бэкапов тоже. Очень экономно получается.

АЛьФ

Цитата: Arbuz от 14 февраля 2025, 14:53О, апгрейд! Это круто!
В линуксе нет таких проблем и заморочек с копирование образов, посекторным копированием. Это избыточно. dd это как из пушки по воробьям. Просто создаёшь необходимую разметку, потом rsync'ом копируешь файловую систему. Всё.
Вариантов на само деле гораздо больше чем под виндой. Можно и удалённо делать. Кстати, у той же клонзиллы под капотом не что иное, как rsync.
ЗЫ: Это касается и бэкапов тоже. Очень экономно получается.

Насколько я понимаю, rsync - это именно синхронизация файлов. Что там с правами происходит? Системные библиотеки и все окружение он нормально скопирует?

Arbuz

Цитата: АЛьФ от 14 февраля 2025, 16:14Насколько я понимаю, rsync - это именно синхронизация файлов. Что там с правами происходит? Системные библиотеки и все окружение он нормально скопирует?
Всё верно — это копирование на файловом уровне. Как ни непривычно после винды, там всё проходит нормально. Более того, это наиболее рекомендуемый способ. Копировать желательно не из-под самой рабочей системы, конечно. Для копирования прав нужно указать специальный ключ. Причём, есть разные варианты, типа разностного копирования, для бэкапов. Если загуглить 'как скопировать linux rsync', то первые же результаты будут вполне рабочими.
PS: И сделать самому, руками, будет гораздо быстрее, надёжней и прозрачней чем какими-то комбайнами, типа клонзиллы.
PPS: "Лучше день потерять, потом за пять минут долететь!" :)

АЛьФ

Цитата: Arbuz от 14 февраля 2025, 16:30
Цитата: АЛьФ от 14 февраля 2025, 16:14Насколько я понимаю, rsync - это именно синхронизация файлов. Что там с правами происходит? Системные библиотеки и все окружение он нормально скопирует?
Всё верно — это копирование на файловом уровне. Как ни непривычно после винды, там всё проходит нормально. Более того, это наиболее рекомендуемый способ. Копировать желательно не из-под самой рабочей системы, конечно. Для копирования прав нужно указать специальный ключ. Причём, есть разные варианты, типа разностного копирования, для бэкапов. Если загуглить 'как скопировать linux rsync', то первые же результаты будут вполне рабочими.
PS: И сделать самому, руками, будет гораздо быстрее, надёжней и прозрачней чем какими-то комбайнами, типа клонзиллы.
PPS: "Лучше день потерять, потом за пять минут долететь!" :)

Как-то пугает объем необходимых знаний. Причем с другими просмотренными сегодня инструменты та же фигня.

Все же мне кажется использовать dd намного проще. Он тупо все скопирует в файл аналогичный диску. И получится, что я просто переставил свой физический диск из физической машины в виртуальном виде в виртуальную машину. Или я что-то неправильно понимаю?

Arbuz

Вот инструкция от DeepSeek:

Хорошо, вот пошаговый инструктаж для выполнения задачи. Будем использовать только терминал на третьей системе (Ubuntu), чтобы минимизировать риски.

---

### 1. **Подключение исходного накопителя**
- Убедитесь, что исходный диск подключен и распознан:
  ```bash
  sudo lsblk -f
  ```
  Найдите идентификатор исходного диска (например, `/dev/sdb`). **Внимание! Не перепутайте с системным диском!**

---

### 2. **Создание виртуального диска KVM меньшего размера**
- Определите занятый объем на исходном диске:
  ```bash
  df -h /dev/sdbX  # Замените X на номер корневого раздела (например, sdb1)
  ```
  Создайте виртуальный диск **больше** занятого объема, но меньше исходного физического диска:
  ```bash
  qemu-img create -f qcow2 ubuntu-vm.qcow2 30G  # Пример для 30 ГБ
  ```

---

### 3. **Копирование разметки с учетом меньшего размера**
- Сохраните таблицу разделов исходного диска:
  ```bash
  sudo sfdisk -d /dev/sdb > partitions.txt
  ```
- Отредактируйте `partitions.txt`, чтобы последний раздел заканчивался **до** границы нового диска:
  ```bash
  nano partitions.txt
  ```
  Например, если новый диск 30 ГБ, последний раздел должен иметь размер меньше 30 ГБ.

- Примените таблицу разделов к виртуальному диску:
  ```bash
  sudo sfdisk --force /dev/nvme0n1 < partitions.txt  # Замените /dev/nvme0n1 на устройство виртуального диска
  ```

---

### 4. **Копирование файловых систем**
#### а) Примонтируйте оба носителя
- Обновите информацию о разделах:
  ```bash
  sudo partprobe /dev/sdb    # Для исходного диска
  sudo partprobe /dev/nvme0n1  # Для виртуального диска
  ```

#### б) Создайте файловые системы на виртуальном диске
Для каждого раздела (пример для ext4):
```bash
sudo mkfs.ext4 /dev/nvme0n1p1  # Для корневого раздела
sudo mkswap /dev/nvme0n1p5     # Для swap (если есть)
```

#### в) Копирование данных
- Монтируем разделы:
  ```bash
  sudo mkdir -p /mnt/src /mnt/dst
  sudo mount /dev/sdb1 /mnt/src    # Корневой раздел исходного диска
  sudo mount /dev/nvme0n1p1 /mnt/dst  # Корневой раздел виртуального диска
  ```
- Копируем данные с сохранением прав:
  ```bash
  sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt/src/ /mnt/dst/
  ```
- Повторите для других разделов (например, `/boot`, `/home`).

---

### 5. **Синхронизация UUID и меток**
#### а) Убедитесь, что UUID разделов совпадают
- Посмотрите UUID исходного диска:
  ```bash
  sudo blkid /dev/sdb1
  ```
- Установите такой же UUID для виртуального диска:
  ```bash
  sudo tune2fs /dev/nvme0n1p1 -U <исходный-UUID>
  ```
  Для swap:
  ```bash
  sudo swaplabel -U <исходный-UUID> /dev/nvme0n1p5
  ```

#### б) Обновите конфиги в виртуальном диске
- Смонтируйте виртуальный диск в chroot:
  ```bash
  sudo mount /dev/nvme0n1p1 /mnt/dst
  sudo mount --bind /dev /mnt/dst/dev
  sudo mount --bind /proc /mnt/dst/proc
  sudo mount --bind /sys /mnt/dst/sys
  sudo chroot /mnt/dst
  ```
- Обновите `fstab` и `grub`:
  ```bash
  nano /etc/fstab  # Проверьте UUID разделов
  update-grub
  grub-install /dev/nvme0n1  # Если используется BIOS
  ```
  Для UEFI:
  ```bash
  mount /dev/nvme0n1p2 /boot/efi  # Если есть ESP-раздел
  grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
  ```
- Выйдите из chroot (`exit`) и размонтируйте:
  ```bash
  umount -R /mnt/dst
  ```

---

### 6. **Проверка**
- Создайте VM в KVM, указав `ubuntu-vm.qcow2` как основной диск.
- Запустите VM и проверьте:
  ```bash
  lsblk -f
  df -h
  cat /etc/fstab
  ```
- Убедитесь, что все разделы отображаются корректно и система загружается.

---

### **Важные замечания**
1. Если исходный диск использует LVM — потребуется дополнительная настройка.
2. Для GPT-разметки используйте `sgdisk` вместо `sfdisk`.
3. Если размер файловой системы больше целевого раздела — используйте `resize2fs` **перед** копированием:
   ```bash
   sudo resize2fs /dev/sdb1 25G  # Уменьшите до 25 ГБ
   ```
4. Для NTFS (если есть Windows-разделы) используйте `ntfsresize`.

Готово! Система на виртуальном диске будет идентична исходной, включая все настройки и данные.

Arbuz

Пропущен момент после 2 шага (слабоват ещё дипсик) как отобразить ubuntu-vm.qcow2 в /dev/nvme0n1 (желательно сменить /dev/nvme0n1 на /dev/nbd0):

$ sudo modprobe nbd max_part=8
$ sudo qemu-nbd --connect=/dev/nbd0 /path/to/ubuntu-vm.qcow2

Arbuz

Вот он исправляется:

Чтобы примонтировать виртуальный диск `ubuntu-vm.qcow2` как блочное устройство (например, `/dev/nbd0`), используйте **qemu-nbd**. Вот как это сделать:

---

### 1. **Установите необходимые инструменты**
```bash
sudo apt install qemu-utils  # Утилиты для работы с QEMU
sudo modprobe nbd            # Загрузите модуль ядра NBD (Network Block Device)
```

---

### 2. **Подключите образ qcow2 через NBD**
```bash
sudo qemu-nbd --connect=/dev/nbd0 ubuntu-vm.qcow2
```
- После этого образ будет доступен как блочное устройство `/dev/nbd0` (а его разделы — `/dev/nbd0p1`, `/dev/nbd0p2` и т.д.).

---

### 3. **Проверьте подключение**
```bash
sudo lsblk /dev/nbd0
```
Вывод должен показать структуру разделов виртуального диска:
```
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nbd0       43:0    0   30G  0 disk
├─nbd0p1   43:1    0   29G  0 part
└─nbd0p2   43:2    0    1G  0 part
```

---

### 4. **Работа с разделами**
Теперь вы можете работать с `/dev/nbd0` как с обычным диском:
- Создавать/редактировать разделы:
  ```bash
  sudo fdisk /dev/nbd0
  ```
- Монтировать разделы:
  ```bash
  sudo mount /dev/nbd0p1 /mnt/dst
  ```

---

### 5. **После завершения работы — отключите устройство**
```bash
sudo umount /mnt/dst          # Если разделы были примонтированы
sudo qemu-nbd --disconnect /dev/nbd0  # Отключите NBD
sudo rmmod nbd                # Выгрузите модуль ядра (опционально)
```

---

### Почему не /dev/nvme0n1?
- **`/dev/nvme0n1`** — это имя **физического NVMe-диска**, а не виртуального образа.
- Для виртуальных образов QCOW2 используйте **NBD-устройства** (`/dev/nbd0`, `/dev/nbd1` и т.д.).

---

### Пример использования
Если вы хотите скопировать данные с физического диска (`/dev/sdb`) в виртуальный образ:
1. Подключите `ubuntu-vm.qcow2` как `/dev/nbd0`:
   ```bash
   sudo qemu-nbd --connect=/dev/nbd0 ubuntu-vm.qcow2
   ```
2. Скопируйте таблицу разделов:
   ```bash
   sudo sfdisk -d /dev/sdb | sudo sfdisk /dev/nbd0
   ```
3. Скопируйте данные:
   ```bash
   sudo dd if=/dev/sdb1 of=/dev/nbd0p1 bs=4M status=progress
   ```

---

### Важно!
- Все операции с `/dev/nbdX` требуют прав **sudo**.
- Не используйте `/dev/nvme0n1`, если это ваш системный диск — это приведет к потере данных!

Arbuz

В любом случае, умение монтировать виртуальные диски на хост-системе это полезно