Файловые системы

LVM Troubleshooting

Спасите, все сломалось!

Есть PV, есть VG, но нет LV

Возможно он просто после сбоя перешел в inactive статус. Проверь это:

root@pve:/etc# lvscan 
  ACTIVE            '/dev/xray-ssd/xray-ssd' [<467.28 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-101-disk-0' [30.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-110-disk-0' [10.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-114-disk-0' [15.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-120-disk-0' [15.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-128-disk-0' [8.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-124-disk-0' [15.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-1207-disk-0' [30.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-1208-disk-0' [30.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-1204-disk-0' [30.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-118-disk-0' [40.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-111-disk-0' [40.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-1205-disk-0' [30.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-129-disk-0' [50.00 GiB] inherit
  inactive          '/dev/xray-ssd/vm-500-disk-0' [50.00 GiB] inherit

Активируй то что неактивно:

lvscan | grep xray | awk '{print $2}' | awk -F'/' '{print "xray-ssd/"$4}'  | sed "s/'//g" | xargs -L1 lvchange -ay 

Готово

root@pve:/etc# lvscan 
  ACTIVE            '/dev/xray-ssd/xray-ssd' [<467.28 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-101-disk-0' [30.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-110-disk-0' [10.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-114-disk-0' [15.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-120-disk-0' [15.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-128-disk-0' [8.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-124-disk-0' [15.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-1207-disk-0' [30.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-1208-disk-0' [30.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-1204-disk-0' [30.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-118-disk-0' [40.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-111-disk-0' [40.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-1205-disk-0' [30.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-129-disk-0' [50.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-500-disk-0' [50.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-130-disk-0' [32.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-133-disk-0' [10.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-131-cloudinit' [4.00 MiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-131-disk-0' [10.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-131-disk-1' [15.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-131-disk-2' [15.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-132-cloudinit' [4.00 MiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-132-disk-0' [15.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-134-disk-0' [<10.20 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-134-cloudinit' [4.00 MiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-503-disk-0' [64.00 GiB] inherit
  ACTIVE            '/dev/xray-ssd/vm-135-disk-0' [32.00 GiB] inherit

Через lsblk можешь проверить, что разделы появились.

Спасите! Пропало вообще все! pvscan в упор не видит раздел, pvck тоже не видит LVM на диске, но он точно там был.

SRC: https://unix.stackexchange.com/questions/489182/lvm-pv-missing-after-reboot

Предположим сценарий: был диск /dev/sdb, на нем был создан проксмоксом thin-lvm, на котором были вольюмы с виртуалками. lsblk показывает просто диск sdb без чего-либо внутри. blkid не выводит по диску ничего.

Смотрим диск через hexedit /dev/sdb (не бойся, он не читает весь диск целиком, как тот же vim и не сожрет всю твою ОЗУ). На оффсете 1000 должны появиться LVM заголовки.

В системе в папке /etc/lvm/backup/ должен быть последний бекап LVM'а. Бекап создается при любой операции с PV (даже создание снапшота/переименование и т.д.), поэтому он должен быть актуальным. Смотрим туда, ищем там physical_volumes, тут мы увидим, был ли у нас LVM на разделе или на самом диске. В моем случае он был на диске:

        physical_volumes {

                pv0 {
                        id = "iEAZSq-3SnC-ZPvI-XF2o-NrIh-lsYb-Xqe6IW"
                        device = "/dev/sdb"     # Hint only

                        status = ["ALLOCATABLE"]
                        flags = []
                        dev_size = 1000215216   # 476.94 Gigabytes
                        pe_start = 2048
                        pe_count = 122096       # 476.938 Gigabytes
                }
        }

Также отсюда нам понадобится ID, это UUID вольюма. Бахаем:

pvcreate --restorefile /etc/lvm/backup/xray-ssd --uuid iEAZSq-3SnC-ZPvI-XF2o-NrIh-lsYb-Xqe6IW /dev/sdb

Теперь у нас должен появиться pv. Надо еще восстановить vg. Делаем

vgcfgrestore --force --file /etc/lvm/backup/xray-ssd xray-ssd

Параметр --force нам тут нужен потому что у нас был thin pool. После этого мы должны увидить LVшки в lvscan. Скорее всего они inactive. Активируем их по инструкции "Есть PV, есть VG, но нет LV". Запускаем какую-нибудь виртуалку, проверяем что все работает. Радуемся.

mdadm troubleshooting

Рейд вроде бы есть, а вроде и нет

Бывает такое, что рейд вроде бы есть, судя по /proc/mdadm, а через lsblk он не отображается и монтировать нечего. Такое бывает, когда рейд деактивировался. Надо его активировать.

# md устройство размером 0 или отсутствует вовсе
losted@raidpg:~$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda       8:0    0   30G  0 disk 
├─sda1    8:1    0 29.9G  0 part /
├─sda14   8:14   0    4M  0 part 
└─sda15   8:15   0  106M  0 part /boot/efi
sdb       8:16   0   15G  0 disk 
└─md127   9:127  0    0B  0 md   
sdc       8:32   0   15G  0 disk 
└─md127   9:127  0    0B  0 md   
sdd       8:48   0   15G  0 disk 
└─md127   9:127  0    0B  0 md   
sr0      11:0    1    4M  0 rom  

# Не монтируется
losted@raidpg:~$ sudo mount /dev/md127 /mnt/
mount: /mnt: can't read superblock on /dev/md127.

# Видим что "State : inactive":
losted@raidpg:~$ sudo mdadm -D /dev/md127
/dev/md127:
           Version : 1.2
        Raid Level : raid5
     Total Devices : 3
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 3

              Name : raidpg:llzrd  (local to host raidpg)
              UUID : 0ba02803:90c97901:9df0da95:058b4689
            Events : 22

    Number   Major   Minor   RaidDevice

       -       8       32        -        /dev/sdc
       -       8       48        -        /dev/sdd
       -       8       16        -        /dev/sdb

# Запускаем его:
losted@raidpg:~$ sudo mdadm --manage /dev/md127 --run
mdadm: started array /dev/md/raidpg:llzrd

# Вуаля
losted@raidpg:~$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda       8:0    0   30G  0 disk  
├─sda1    8:1    0 29.9G  0 part  /
├─sda14   8:14   0    4M  0 part  
└─sda15   8:15   0  106M  0 part  /boot/efi
sdb       8:16   0   15G  0 disk  
└─md127   9:127  0   45G  0 raid5 
sdc       8:32   0   15G  0 disk  
└─md127   9:127  0   45G  0 raid5 
sdd       8:48   0   15G  0 disk  
└─md127   9:127  0   45G  0 raid5 
sr0      11:0    1    4M  0 rom   

losted@raidpg:~$ sudo mount /dev/md127 /mnt/
losted@raidpg:~$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda       8:0    0   30G  0 disk  
├─sda1    8:1    0 29.9G  0 part  /
├─sda14   8:14   0    4M  0 part  
└─sda15   8:15   0  106M  0 part  /boot/efi
sdb       8:16   0   15G  0 disk  
└─md127   9:127  0   45G  0 raid5 /mnt
sdc       8:32   0   15G  0 disk  
└─md127   9:127  0   45G  0 raid5 /mnt
sdd       8:48   0   15G  0 disk  
└─md127   9:127  0   45G  0 raid5 /mnt
sr0      11:0    1    4M  0 rom   

 

 

Data recovery

Кулстори о том как я восстанавливал данные с диска

Умер диск на котором был проксмокс, записать ничего не дает, чтение с ошибками.

Диск был на 500 гб, у меня есть пустой диск на 500 гб, этого может не хватить, поэтому отформатируем его в btrfs и примонтируем со сжатием:

sudo mkfs.btrfs /dev/sdb1
sudo mount -o compress=zstd /dev/sdb1 /mnt

Также нам будут полезны снапшоты.

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

sudo ddrescue -S /dev/sda /mnt/sda.ddrescue

Восстановилось. Теперь примонтируем образ:

# сделаем снап на всякий
sudo btrfs subvolume snapshot -r /mnt /mnt/orig-snap
# -P : losetup автоматически перечитает таблицу разделов в файле. Иногда даже partprobe может не отработать, поэтому лучше укажи этот параметр
sudo losetup -P /dev/loop0 sda.ddrescue

Лучше перед этим отключи диск, т.к. lv называются так же как на диске и их не получится активировать.

Если ты попал в ловушку джокера и lv остались от диска в /dev/mapper, то удали их руками через dmsetup:

# если все LV активны но не видны в lsblk:
losted in ~ λ sudo dmsetup ls                                                          
pve-data-tpool	(254:5)
pve-data_tdata	(254:4)
pve-data_tmeta	(254:3)
pve-root	(254:2)
pve-swap	(254:1)
pve-vm--100--disk--0	(254:7)
pve-vm--108--disk--0	(254:8)
pve-vm--110--disk--0	(254:13)
pve-vm--113--disk--0	(254:11)
pve-vm--113--disk--1	(254:12)
pve-vm--200--disk--0	(254:9)
pve-vm--201--disk--0	(254:10)
rootfs	(254:0)

losted in ~ λ sudo dmsetup remove pve-vm--200--disk--0 pve-vm--113--disk--1 pve-vm--113--disk--0 pve-vm--110--disk--0 pve-vm--108--disk--0 pve-swap pve-vm--100--disk--0
# и так далее удаляем остальное, оно зависит друг от друга, так что удаляй в несколько заходов

Далее из рута вытаскиваем конфиги виртуалок по пути /etc/pve, а так же вытаскиваем образы дисков:

# по каждому диску делаем
sudo qemu-img convert -p -O qcow2 /dev/mapper/pve-vm--108--disk--0 pve-vm-108-disk-0.qcow2

Далее создадим еще один снапшот диска и проверим каждую виртуалку:

sudo btrfs subvolume snapshot /mnt /mnt/start-vms
sudo qemu-system-x86_64 -enable-kvm -cpu max -nic none -m 2048 -hda pve-vm-113-disk-0.qcow2 -hdb pve-vm-113-disk-1.qcow2

Отключаем, отмонтируем, загружаем на свежеустановленный проксмокс образы виртуалок, создаем аналогичные виртуалки.

Всякое

Прочитать/записать блок 200, он же сектор, учитывая что диск побит на 512-байт блоки (в случае Advanced Format дисков блоки по 4096 байт - 4К): 

dd bs=512 if=/dev/sda2 of=/tmp/sector200 skip=200 count=1