lvm raid1

Добавляем диски в LVM

pvcreate /dev/sdX1 /dev/sdY1

Создаём группу vgdata из двух дисков

vgcreate raid1vg0 /dev/sdX1 /dev/sdY1

Создаём логический диск с RAID 1 под именем lvmirror на 3ГБ:

lvcreate --mirrors 1 --type raid1 -l 100%FREE --nosync -n raid1lv0 raid1vg0

можно указать флаг --nosync, чтобы пропустить синхронизацию пустого зеркала.

Смотрим что получилось

lvs -a -o +devices

Колонка Cpy%Sync показывает, процент синхронизации, а Devices, устройства, на которых находятся данные логического диска.

FS

Осталось создать файловую систему:

mkfs.ext4 /dev/vgdata/lvmirror

И можно примонтировать и пользоваться

mount /dev/vgdata/lvmirror /mnt/

Тестируем LVM RAID 1 и учимся чинить

Как можно доверять свои данные технологии, когда ты не знаешь, что произойдёт в случае нештатной ситуации и как всё починить без потери данных.

Для начала, посмотрим, как у нас всё выглядит до начала тестов:

lvs -a -o +devices,lv_health_status

LV VG Attr LSize Cpy%Sync Devices Health lvmirror vgdata rwi-aor--- 3.00g 100.00 lvmirror_rimage_0(0),lvmirror_rimage_1(0)[lvmirror_rimage_0] vgdata iwi-aor--- 3.00g /dev/sdX1(1) [lvmirror_rimage_1] vgdata iwi-aor--- 3.00g /dev/sdY1(1) [lvmirror_rmeta_0] vgdata ewi-aor--- 4.00m /dev/sdX1(0) 
[lvmirror_rmeta_1] vgdata ewi-aor--- 4.00m /dev/sdY1(0)

Теперь мы можем приступать к тестированию, но сначала:Предупреждение

Убедитесь, что вы используете верный диск в командах, так как это может привести к потере данные на диске!

Отвал диска (ресинхронизация) и его замена

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

Отключаем диск sdX:

echo offline > /sys/block/sdX/device/state

Теперь, чтобы LVM понял, что с диском что-то не то, нужно записать на диск данные.

Если FS есть:

echo test > /mnt/test.txt

Если FS нет(эта команда уничтожит FS, если она есть!):

dd if=/dev/zero of=/dev/vgdata/lvmirror count=10

Смотрим результат:

lvs -a -o +devices,lv_health_status

/dev/sdX: open failed: No such device or address /dev/sdX: open failed: No such device or address /dev/sdX: open failed: No such device or address WARNING: Couldn't find device with uuid VkIceg-2ZVd-tTuZ-HgHz-EblT-5GwQ-oH3gKM. WARNING: VG vgdata is missing PV VkIceg-2ZVd-tTuZ-HgHz-EblT-5GwQ-oH3gKM (last written to /dev/sdX1). WARNING: Couldn't find all devices for LV vgdata/lvmirror_rmeta_0 while checking used and assumed devices. WARNING: Couldn't find all devices for LV vgdata/lvmirror_rimage_0 while checking used and assumed devices. LV VG Attr LSize Cpy%Sync Devices Health lvmirror vgdata rwi-aor-p- 3.00g 100.00 lvmirror_rimage_0(0),lvmirror_rimage_1(0) partial [lvmirror_rimage_0] vgdata iwi-aor-p- 3.00g [unknown](1) partial [lvmirror_rimage_1] vgdata iwi-aor--- 3.00g /dev/sdY1(1) [lvmirror_rmeta_0] vgdata ewi-aor-p- 4.00m [unknown](0) partial [lvmirror_rmeta_1] vgdata ewi-aor--- 4.00m /dev/sdY1(0)

Обратите внимание, статус Health стал partial

Теперь запишем рандомные данные на диск, чтобы можно было увидеть рассинхронизацию:

FS есть, пишем в файл /mnt/random.file:

dd if=/dev/urandom of=/mnt/random.file bs=10M count=10

FS нет(эта команда уничтожит FS, если она есть!):

dd if=/dev/urandom of=/dev/vgdata/lvmirror bs=10M count=10

Включаем диск sdX обратно:

echo running > /sys/block/sdX/device/state

Смотрим результат:

1lvs -a -o +devices,lv_health_status
1 2 3 4 5 6LV VG Attr LSize Cpy%Sync Devices Health lvmirror vgdata rwi-aor-r- 3.00g 100.00 lvmirror_rimage_0(0),lvmirror_rimage_1(0) refresh needed [lvmirror_rimage_0] vgdata Iwi-aor-r- 3.00g /dev/sdX1(1) refresh needed [lvmirror_rimage_1] vgdata iwi-aor--- 3.00g /dev/sdY1(1) [lvmirror_rmeta_0] vgdata ewi-aor-r- 4.00m /dev/sdX1(0) refresh needed [lvmirror_rmeta_1] vgdata ewi-aor--- 4.00m /dev/sdY1(0)

Ошибки и предупреждения об отсутствии диска пропали, но статус Health изменился на refresh needed

Чиним

Запускаем синхронизацию командой:

1lvchange --refresh /dev/vgdata/lvmirror

Но если диск выпал, я бы рекомендовал его заменить на новый, проинициализировав его и добавив в PV и VG:

1 2pvcreate /dev/sdZ1 vgextend vgdata /dev/sdZ1

И заменив диск у зеркала:

1lvconvert --replace /dev/sdX1 /dev/vgdata/lvmirror /dev/sdZ1

Замена мёртвого диска

Теперь давайте просимулируем замену мёртвого диска, для этого нам придётся стереть заголовок нашего диска, чтобы он выглядел как новый:
Эта команда уничтожит данные на диске!

1dd if=/dev/zero of=/dev/sdX bs=10M count=1

При вызове

1lvs -a -o +devices,lv_health_status

Мы увидим тот же результат, что и при отвале диска, статус Health стал partial, но чинится это по другому.

Чиним

Удалим старый диск из VG

1vgreduce --removemissing --force vgdata

Так как мы стёрли заголовки диска, нам придётся проинициализировать диск заново и добавить его в PV и VG:

1 2pvcreate /dev/sdX1 vgextend vgdata /dev/sdX1

И нужно починить наше зеркало

1lvconvert --repair /dev/vgdata/lvmirror

Автоматически запуститься ресинхронизация.

Конвертируем логический диск из RAID 1 в обычный

1lvconvert -m0 /dev/vgdata/lvmirror

Конвертируем логический диск из обычного в RAID 1

1lvconvert -m1 /dev/vgdata/lvmirror

Увеличиваем размер диска с зеркалом

1 2 3 4 5umount /dev/vgdata/lvmirror # Добавляем 5GB к диску lvresize --resizefs --size +5G /dev/vgdata/lvmirror # Смотрим результат lvs

Уменьшаем размер диска с зеркалом

1 2 3 4 5umount /dev/vgdata/lvmirror # Делаем диск равным 4GB lvresize --resizefs --size 4G /dev/vgdata/lvmirror # Смотрим результат lvs

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.