Воссоздать раздел XFS с существующей файловой системой

У меня есть сервер CentOS с двумя RAID-массивами. Массив ОС и массив ДАННЫХ. Короче говоря, недавно было множество проблем с ОС, и пришлось перезагружать CentOS (было 5,7 и пошло до 6,5). Теперь все работает с частью ОС. Однако у меня возникла проблема с моим массивом данных.

Массив отображается как / dev / sdb, но у меня был раздел (/dev/sdb1), где хранятся все мои данные. Сервер больше не видит / dev / sdb1, поэтому я думаю, что таблица разделов как-то испорчена. Когда я печатаю в parted, он перечисляет тип раздела как цикл:

NON-WORKING SERVER:
Model: Adaptec DATA (scsi)
Disk /dev/sdb: 59.9TB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  59.9TB  59.9TB  xfs

У меня есть другой сервер, который является точной копией этого сервера, он правильно отображается в parted и / dev / sdb1 виден:

WORKING SERVER:
Model: Adaptec STORAGE (scsi)
Disk /dev/sdb: 59.9TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  59.9TB  59.9TB  xfs          primary       

Можно ли как-то исправить раздел, чтобы я не уничтожил свои данные? Мне отчаянно нужно сохранить данные, но я просто не могу понять, есть ли способ исправить раздел и / или почему он отображается в виде цикла.

Спасибо за любую помощь!!

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

fdisk -l / dev / sdb:

Disk /dev/sdb: 59914.8 GB, 59914783293440 bytes
255 heads, 63 sectors/track, 7284224 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf0b62000

BLKID:

/dev/sda1: UUID="9de0d036-a86f-4557-8e09-a5ccd33c66be" TYPE="ext4" 
/dev/sda2: UUID="VYyo4L-lkdG-GivI-a6eM-pFfX-TOoV-E1LxcF" TYPE="LVM2_member" 
/dev/mapper/VolGroup-lv_root: UUID="18bbe93e-9b67-4343-8d71-71bd087ab145" TYPE="ext4" 
/dev/sdb: LABEL="Data" UUID="dfda2895-d1cd-4b3e-8453-e5c51c093260" TYPE="xfs" 
/dev/mapper/VolGroup-lv_swap: UUID="d71f193f-acd4-4aea-8d11-be2acd4575f3" TYPE="swap" 
/dev/mapper/VolGroup-lv_home: UUID="223b2be8-f9e9-4671-bc84-e5aa5f73b697" TYPE="ext4" 

Распечатка разделенного / dev / sdb модуля (НЕ РАБОЧИЙ СЕРВЕР):

Model: Adaptec DATA (scsi)
Disk /dev/sdb: 117021061120s
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End            Size           File system  Flags
 1      0s     117021061119s  117021061120s  xfs

Распечатка разделенного / dev / sdb модуля (РАБОЧИЙ СЕРВЕР):

Model: Adaptec STORAGE (scsi)
Disk /dev/sdb: 117021061119s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End            Size           File system  Name     Flags
 1      34s    117021061086s  117021061053s  xfs          primary       

2 ответа

Итак, кто-то перезаписал весь том новой, пустой файловой системой XFS, и ваша проблема в том, что вам нужно найти суперблок старого, потому что суперблок содержит случайное число, которое используется в вычислениях контрольной суммы, чтобы определить, является ли конкретный блок является частью текущей файловой системы или более ранней итерации (в противном случае fsck в новой файловой системе наткнется на старые данные).

Мой первый подход — создать циклические устройства только для чтения со смещением и посмотреть, смогу ли я их смонтировать:

Стандартное смещение составляет 1 МБ, поэтому сначала попробуйте

      losetup -r -o 1M /dev/loop0 /dev/sdb
mount -r /dev/loop0 /mnt

и проверьте, нужна ли вам именно эта файловая система. Если это неправильное смещение, вы можете выполнить поиск, используя что-то вроде

      d=`losetup -f`
for i in `seq 1 4096`
do
    until losetup -r -o ${i}k $d /dev/sdb
    do
        :
    done &&
    mount -r $d /mnt && break
    losetup -d $d
done

Внутренний цикл необходим, поскольку, по-видимому, существует состояние гонки, которое иногда приводит к «занятости устройства или ресурса» во время настройки устройства цикла.

В конце этого цикла у вас должна быть смонтирована файловая система — убедитесь, что это та, которая вам нужна, и— смещение раздела в килобайтах.

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

Вполне вероятно, что файловая система будет серьезно повреждена, если она действительно была отформатирована, но смещение должно позволить хотя бы что-то восстановить.

Хитрая.

Тип раздела цикла фактически означает, что таблицы разделов нет.

Таблица разделов в основном говорит ОС, где искать начало раздела и где он должен останавливаться при создании файловой системы. Так что в таблице нет ничего волшебного, и если у вас есть правильная информация, если вы просто записываете ее в соответствующую позицию, ваш диск должен быть не хуже...... э... нового... Ну, вы получите картину...;)

Вот что я бы сделал:

  1. Создайте резервную копию текущей таблицы разделов проблемного хоста, хотя она и пуста, используя dd if=/dev/sdb of=/root/sdb-parttable.bin bs=512 count=1
  2. Затем я использовал бы fdisk, чтобы узнать начальный сектор и конечный сектор на другом сервере, записал их,
  3. Создайте новый раздел, используя fdisk на проблемном сервере (не делая ничего другого!), Используя точные значения со второго сервера.
  4. Запишите эту таблицу разделов на диск
  5. Попробуйте смонтировать /dev/sdb1
  6. Если это не работает, используйте dd if=/root/sdb-parttable.bin of=/dev/sdb bs=1 count=64 skip=446 seek=446 восстановить старую таблицу разделов.

Отказ от ответственности: это немного сложная операция. Информация в этом ответе была дана в надежде, что она может быть полезной и без каких-либо гарантий... Если у вас есть какие-либо средства для резервного копирования диска на байтовом уровне, прежде чем предпринимать следующие действия: сделайте это!

Другие вопросы по тегам