Рейтинг:2

Как я могу восстановить моментальный снимок LVM большего тома на меньшем диске?

флаг in

Я пытаюсь сделать резервную копию/восстановить том LVM на локальном сервере Ubuntu 20.04 (Focal Fossa). Рабочий сервер имеет LV 500 ГБ, однако пока используется только 19 ГБ.

На локальном сервере разработки есть 24 ГБ свободного места, где я намерен восстановить 19 ГБ из производства. я использую -Л 24Г в качестве параметра при создании моментального снимка LVM.Процесс не восстанавливается с сообщением: «на устройстве не осталось места»:

Рабочий сервер:

sudo lvcreate -s /dev/vg0/test -n backup_test -L 24G
sudo dd if=/dev/vg0/backup_test | lz4 > test_lvm.ddimg.lz4

1048576000+0 записей в
1048576000+0 записей вышло
536870912000 байт (537 ГБ, 500 ГиБ) скопировано, 967,79 с, 555 МБ/с

судо lvdisplay /dev/vg0/backup_test
  --- Логический том ---
  Путь LV /dev/vg0/backup_test
  Имя LV backup_test
  Имя ВГ vg0
  LV UUID IsGBmM-VM7C-2sO4-VRC1-kHKg-EzcR-4Hej44
  LV Доступ для записи для чтения/записи
  Хозяин LV Creation, time leo, 04.07.2021 12:45:45 +0200
  Состояние моментального снимка LV активное назначение для m360
  Статус LV доступен
  # открыть 0
  Размер LV 500,00 ГиБ
  Текущий LE 128000
  Размер COW-таблицы 24,00 ГиБ
  КОРОВ-стол LE 6144
  Выделено снимку 0,01%
  Размер фрагмента снимка 4,00 КиБ
  Сегменты 1
  Распределение наследует
  Автоматическое чтение секторов вперед
  - в настоящее время установлен на 256
  Блочное устройство 253:10

Локальный тестовый сервер:

sudo lvcreate -n restore -L данные 24,5G
sudo mkfs.ext4 /dev/data/restore
судо lz4 -d test_lvm.ddimg.lz4 | sudo dd of=/dev/data/restore

Предупреждение: использование stdout в качестве вывода по умолчанию. Не полагайтесь на это поведение: вместо этого используйте явный `-c`!
dd: запись в '/dev/data/restore': на устройстве не осталось места
51380225+0 записей в
51380224+0 записей вышло
26306674688 байт (26 ГБ, 24 ГБ) скопировано, 1181,48 с, 22,3 МБ/с

Есть ли способ восстановить том объемом 500 ГБ, содержащий только 19 ГБ, на диск меньше, чем 500 ГБ?

Michael Hampton avatar
флаг cz
Вы восстанавливаете не 19 ГБ, вы восстанавливаете 500 ГБ!
merlin avatar
флаг in
Но какое значение тогда имеет параметр во время lvcreate: -L 24G ?
Michael Hampton avatar
флаг cz
Вы создали том размером 24,5 ГБ.
merlin avatar
флаг in
Да, я это сделал только для того, чтобы убедиться, что этого достаточно для 24G. Сначала я создал 24G, затем он потерпел неудачу, и я попробовал немного больше, чтобы приспособиться к любым небольшим различиям.
Michael Hampton avatar
флаг cz
Но это все же гораздо меньше, чем 500 ГБ, которые вы пытаетесь восстановить!
A.B avatar
флаг cl
A.B
Кстати, какая файловая система? доб4? хфс? бтрфс? Что-то другое?
merlin avatar
флаг in
Ext4 - это файловая система.
Рейтинг:5
флаг us

Данные, которые вы пытаетесь восстановить, имеют размер 500 ГБ, и они не поместятся на логическом томе размером 24 ГБ. Вы можете быть более избирательны в отношении того, что вы передаете, или вы можете выделить больше места для целевой группы томов.

Похоже, данные на логическом томе, который вы копируете, составляют всего 19 ГБ. Есть несколько способов передать эти данные.

Если вас интересуют только данные, а не файловая система, вы можете создать новую файловую систему (через mkfs.ext4 или около того) на цели и использовать инструменты, которые работают с файлами вместо блочных устройств, такие как rsync(1) или tar(1).

В качестве альтернативы вы можете использовать фархив (8), который может создавать резервные копии файловой системы, а затем восстанавливать ее на устройстве меньшего размера.

Наконец, вы можете уменьшить размер блочного устройства, для которого выполняется резервное копирование, с помощью resize2fs(8) и lvreduce(8). Затем вы можете создать резервную копию этого тома меньшего размера и восстановить том аналогичного размера на новом сервере.

Рейтинг:2
флаг cn

Единственный способ восстановить данные — использовать сжатое блочное устройство (например, VDO, loop-device со сжатой файловой системой, такой как btrfs и ZFS).

Однако даже если ваши данные составляют всего 17 ГБ, свободное пространство может содержать данные предыдущих записей, и весь LV может быть не таким сжимаемым.

В качестве сжатых файловых систем вы можете использовать btrfs или ZFS и создать обнуленный файл 500G, который вы сопоставляете с петлевым устройством (с неудачник), или, в ZFS, вы можете создать непосредственно блочное устройство, которое сжимается. Затем восстановите свой LV на блочном устройстве, которое вы создали на предыдущем шаге. Сжатие должно дать вам возможность восстановить все данные.

merlin avatar
флаг in
Какое обоснование имеет тогда размер моментального снимка логического тома? Размер коровы?
Рейтинг:1
флаг cn

Два пункта для решения.

Создание моментального снимка 24G LVM означает, что моментальный снимок выдержит 24G изменения между исходным томом и томом моментального снимка. Само устройство моментального снимка будет иметь тот же размер, что и исходный том. Даже если вы никогда не будете вносить изменения в том моментального снимка, любые изменения в исходном томе должны быть записаны как изменения между исходным томом и моментальным снимком, и это съест размер 24G моментального снимка.

Чтобы сделать то, что вы пытаетесь сделать, вот несколько идей:

  1. Для не очень идеальной копии просто используйте копию файлов на уровне файловой системы:

на тестовом сервере:

sudo mount /dev/data/restore /mnt/restore

на исходном сервере:

sudo rsync -avPAHX /source/dir/ root@testserver:/mnt/restore/
  1. Для точной копии на момент времени смонтируйте снимок и rsync что:
sudo mount -r /dev/vg0/backup_test /mnt/backup_test
sudo rsync -avPAHX /dev/vg0/backup_test/ root@testserver:/mnt/restore/
  1. Если вы действительно хотите перенести образ диска, вам придется сначала сжать файловую систему и логический том. Имейте в виду, что сначала вам придется размонтировать файловую систему.
судо lvresize -L24G -r vg0/тест

Тогда делай то, что ты сделал.

Рейтинг:1
флаг ru

Концепция (не)используемых байтов не существует на уровне LVM. Содержит ли байт (или фактически сектор) значимые данные или неиспользуемый мусор, определяется файловой системой, которая живет внутри LV. LVM не знает, что такое файловая система. Все, что он делает, это берет кучу дисков и логически объединяет их в соответствии с вашими инструкциями. Неважно, что вы будете делать с этим объединенным объемом.

Это означает, что вы делаете снимок 500 ГБ данных. LVM не понимает, какие части этого моментального снимка имеют смысл и заслуживают сохранения, а какие нет.

То, чего вы хотите достичь, возможно на уровне файловой системы путем создания образа. Некоторое программное обеспечение, например бесплатный partclone, понимает структуру файловых систем и может создавать изображение - по существу разреженный файл, содержащий только те части файловой системы, которые используются. Подвох здесь в том, что целевое устройство должно быть как минимум того же размера, что и исходное, потому что partclone не корректирует геометрию файловой системы: все сохраненные фрагменты должны вернуться в свои исходные местоположения при восстановлении образа.

Таким образом, план будет следующим:

  • Измените размер исходной файловой системы на 25 ГБ (это не требует изменения размера LV!)
  • Изобразите его с помощью частичного клона или чего-то подобного
  • Воссоздайте LV на цели вручную
  • Восстановить файловую систему из образа

Вариантом этого может быть изменение размера файловой системы до 25 ГБ, а затем отправка моментального снимка LVM. Он выдаст ошибку «на устройстве не осталось места», потому что вы все еще отправляете все 500 ГБ, но это нормально, потому что только первые 25 ГБ тома будут содержать файловую систему.

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

Рейтинг:0
флаг dk

Вы должны использовать lvconvert команда с --mergesnapshot параметр и имя моментального снимка логического тома для восстановления логического тома LVM. Когда --mergesnapshot используется, моментальный снимок объединяется с исходным логическим томом, а затем стирается.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.