Пытаюсь восстановить массив raid1, оба диска - флешки NVMe.
В конце долгого и плохого дня я сделал действительно глупую вещь - стер первые 512 байт каждого диска NVMe - намерением было отключить загрузчик. Оказалось, что я стер данные разделов, а также информацию о RAID. Я сделал резервные копии этих 512 байт - но угадайте, что - я сделал их на тех же дисках, поэтому сейчас они недоступны.
Сделал копии дисков с dd на другой диск, и начал пытаться восстановить данные - сделал testdisk, который нашел все разделы:
Disk /dev/nvme0n1 - 512 GB / 476 GiB - CHS 488386 64 32
Current partition structure:
Partition Start End Size in sectors
1 * Linux RAID 1 0 1 32737 63 32 67045376 [rescue:0]
2 P Linux RAID 32769 0 1 33280 63 32 1048576 [rescue:1]
3 P Linux RAID 33281 0 1 488257 63 32 931792896 [rescue:2]
Я записал данные этого раздела на оба диска, сделал перезагрузку, но восстановился только раздел / boot - первый. Я пытался собрать корневой раздел (третий) с помощью mdadm, но не удалось
[Sun May 27 11:30:40 2018] md: nvme0n1p3 does not have a valid v1.2 superblock, not importing!
[Sun May 27 11:30:45 2018] md: nvme0n1p3 does not have a valid v1.2 superblock, not importing!
[Sun May 27 13:45:32 2018] md: nvme1n1p1 does not have a valid v1.2 superblock, not importing!
[Sun May 27 13:45:32 2018] md: nvme0n1p1 does not have a valid v1.2 superblock, not importing!
[Sun May 27 13:45:32 2018] md: nvme1n1p3 does not have a valid v1.2 superblock, not importing!
[Sun May 27 13:45:32 2018] md: nvme0n1p3 does not have a valid v1.2 superblock, not importing!
В моих планах было как-то примонтировать корневой раздел с одного из дисков, сделать резервную копию сектора и все восстановить.
Но я не могу смонтировать / dev / nvme1n1p3, он не работает
# mount /dev/nvme0n1p3 /mnt/arr2
mount: unknown filesystem type 'linux_raid_member'
# mount /dev/nvme0n1p3 /mnt/arr2 -t ext4
mount: /dev/nvme0n1p3 is already mounted or /mnt/arr2 busy
Что можно сделать, чтобы получить доступ к файлам в / dev / nvme0n1p3?
ОБНОВИТЬ: Благодаря совету Петра Жабина я все же попытался восстановить файловую систему на одном из дисков, / dev / nvme1n1, с восстановлением разделов с помощью testdisk:
Я взял смещение с другого сервера с похожими (но не точными) дисками и разделами:
losetup --find --show --read-only --offset $((262144*512)) /dev/nvme1n1p3
Fsck пожаловался на неправильное разбиение на разделы (или суперблок) и дал статистику FS, которая очень похожа на то, что было на диске:
fsck.ext3 -n -v /dev/loop1
e2fsck 1.43.3 (04-Sep-2016)
Warning: skipping journal recovery because doing a read-only filesystem check.
The filesystem size (according to the superblock) is 116473936 blocks
The physical size of the device is 116441344 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort? no
/dev/loop1 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Inode 26881053 extent tree (at level 2) could be narrower. Fix? no
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (20689291, counted=20689278).
Fix? no
Free inodes count wrong (25426857, counted=25426852).
Fix? no
3695703 inodes used (12.69%, out of 29122560)
30256 non-contiguous files (0.8%)
442 non-contiguous directories (0.0%)
# of inodes with ind/dind/tind blocks: 0/0/0
Extent depth histogram: 3616322/1294/3
95784645 blocks used (82.24%, out of 116473936)
0 bad blocks
29 large files
3510238 regular files
107220 directories
2 character device files
0 block device files
53 fifos
1248 links
78147 symbolic links (77987 fast symbolic links)
39 sockets
------------
3696947 files
Однако мне не удалось смонтировать файловую систему:
root@rescue /mnt/backups # mount -o ro /dev/loop1 /mnt/reco/
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
missing codepage or helper program, or other error
Что делать дальше? Такое ощущение, что данные так близки ...
Хорошо, наконец, мне удалось восстановить MBR. Как я упоминал выше, я сделал резервную копию MBR обоих дисков RAID - на самих дисках. Это было сделано с помощью команды dd:
dd if=/dev/nvme0n1 bs=512 count=1 of=nvme0n1.bootsector.backup
dd if=/dev/nvme1n1 bs=512 count=1 of=nvme1n1.bootsector.backup
Я подумал, что можно будет искать файлы резервных копий MBR в образах дисков. Я сохранил сектора MBR на аналогичном сервере в файл mbrb.backup, и в нем была строка:
"GRUB\20\0Geom\0Hard\20Disk\0Read\0\20Error"
Поскольку мне не удалось найти строку с нулевыми байтами в образе 512 ГБ, я выполнил поиск с помощью grep, который искал отдельные строки, например, в рабочем MBR:
#dd if=/dev/sdb of=mbrb.backup bs=512 count=1
#strings -t d mbr.backup | grep -4 -iE 'GRUB' | grep -4 'Geom' | grep -4 'Hard Disk' | grep -4 'Read' | grep -4 'Error'
392 GRUB
398 Geom
403 Hard Disk
413 Read
418 Error
Я начал искать эту строку на необработанном диске:
#strings -t d /dev/nvme1n1 | grep -4 -iE 'GRUB' | grep -4 'Geom' | grep -4 'Hard Disk' | grep -4 'Read' | grep -4 'Error'
И с этой строкой было найдено около 20+ смещений. Смещения выглядели так:
34368320904 GRUB
34368320910 Geom
34368320915 Hard Disk
34368320925 Read
34368320930 Error
34702932360 GRUB
34702932366 Geom
34702932371 Hard Disk
34702932381 Read
34702932386 Error
and some more results....
Затем я сохранил их все с помощью dd, вычислил количество блоков с помощью bc:
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
34368320904/512
67125626
dd if=/dev/nvme1n1 of=recovery_file.34368320904 bs=512 skip=67125626 count=2
Получил около 20+ файлов, большинство из них были в точности похожи, возможно, некоторые файлы GRUB. Затем я начал сравнивать их с MBR, которые я сохранил с рабочего сервера. Последний выглядел очень похоже. Я сохранил его в MBR сломанного диска:
dd if=recovery_file.475173835144 of=/dev/nvme1n1 bs=521 count=1
Проверил с помощью testdisk, что интересно, жаловалось, что разделы неправильные, но все остальное выглядело очень многообещающе:
Disk /dev/nvme1n1 - 512 GB / 476 GiB - CHS 488386 64 32
Current partition structure:
Partition Start End Size in sectors
1 P Linux RAID 1 0 1 32768 63 32 67108864 [rescue:0]
Warning: Bad starting sector (CHS and LBA don't match)
2 P Linux RAID 32769 0 1 33280 63 32 1048576 [rescue:1]
Warning: Bad starting sector (CHS and LBA don't match)
3 P Linux RAID 33281 0 1 488385 21 16 932053680 [rescue:2]
Warning: Bad starting sector (CHS and LBA don't match)
No partition is bootable
Поэтому я рискнул и поставил ту же MBR в рейд / dev / nvme0n1. После перезагрузки устройства md поднялись, и мои данные вернулись. Похоже на чудо.