내 RAID1 어레이(/dev/sda)의 디스크 중 하나에 최종 오류 징후가 표시되어 오류가 발생하여 어레이에서 제거했습니다.
그런 다음 디스크를 교체하고 재부팅한 다음 디스크를 어레이에 추가하기 위해 파티션을 복사하는 프로세스를 시작했지만 문제가 발생했습니다.
내가 사용한 마지막 명령은 다음과 같습니다.
sgdisk -R /dev/sdb /dev/sda
이제 lsblk는 /dev/sdb에 대한 올바른 파티션을 표시합니다.
[root@server /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:1 0 477G 0 disk
├─nvme0n1p3 259:4 0 7.8G 0 part
│ └─md3 9:3 0 7.8G 0 raid1 /tmp
├─nvme0n1p1 259:2 0 511M 0 part /boot/efi
├─nvme0n1p4 259:5 0 7.8G 0 part [SWAP]
└─nvme0n1p2 259:3 0 460.8G 0 part
└─md2 9:2 0 460.8G 0 raid1 /
sdb 8:16 0 3.7T 0 disk
└─sdb1 8:17 0 3.7T 0 part
└─md4 9:4 0 3.7T 0 raid1 /var
nvme1n1 259:0 0 477G 0 disk
├─nvme1n1p4 259:9 0 7.8G 0 part [SWAP]
├─nvme1n1p2 259:7 0 460.8G 0 part
│ └─md2 9:2 0 460.8G 0 raid1 /
├─nvme1n1p3 259:8 0 7.8G 0 part
│ └─md3 9:3 0 7.8G 0 raid1 /tmp
└─nvme1n1p1 259:6 0 511M 0 part
sda 8:0 0 3.7T 0 disk
그러나 sda를 실행하면 동일한 결과가 표시되지 않거나 더 나쁜 결과가 표시됩니다.
sgdisk -p /dev/sdb
/dev/sda와 같은 파티션 테이블은 표시되지 않습니다.
[root@server dev]# sgdisk -p /dev/sdb
Disk /dev/sdb: 7814037168 sectors, 3.6 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 34DA93D9-0A46-433D-BDE3-6AF2566E2183
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 7814037134
Partitions will be aligned on 2048-sector boundaries
Total free space is 7814037101 sectors (3.6 TiB)
Number Start (sector) End (sector) Size Code Name
[root@server dev]# sgdisk -p /dev/sda
Disk /dev/sda: 7814037168 sectors, 3.6 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): EBADBC60-3D20-48F7-880B-5CCF1B645A44
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 7814037134
Partitions will be aligned on 2048-sector boundaries
Total free space is 7814037101 sectors (3.6 TiB)
Number Start (sector) End (sector) Size Code Name
[root@server dev]#
partprobe를 실행하면 다음 오류가 발생합니다.
[root@server dev]# partprobe
Error: Partition(s) 1 on /dev/sdb have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes.
이제 저는 (분명히) 가장 숙련된 Linux 관리자는 아니지만, 실제로는 /dev/sdb를 /dev/sda에 복사하지 않고 그 반대 작업을 수행하여 /dev/sdb의 파티션 테이블을 지운 것 같습니다.
다행히 시스템을 재부팅하지 않아 시스템이 활성화되어 실행되고 있습니다. 작업 파티션 테이블을 복원할 수 있는 방법이 있기를 바랐습니다.
현재 가장 큰 불행은 이것이 프로덕션 서버이고 오랜 기간 동안 다운/오프라인 상태를 유지하는 것은 매우 파괴적이라는 것입니다. 그래서 누군가가 이것을 정상으로 되돌릴 수 있도록 안내해 줄 수 있기를 바랍니다.
도움을 받기 위해 여기에서 무엇을 더 공유할 수 있는지 잘 모르겠습니다. 결과가 있으면 언제든지 게시해 주시기 바랍니다.
미리 감사드립니다.
답변1
커널이 여전히 올바른 파티션 테이블을 알고 있다면 다음과 같이 파티션 시작 오프셋과 크기를 쿼리할 수 있습니다.
# partition start offsets
head /sys/block/sdf/sdf*/start
# partition sizes
head /sys/block/sdf/sdf*/size
예제 출력:
$ head /sys/block/sdf/sdf*/start
==> /sys/block/sdf/sdf1/start <==
2048
==> /sys/block/sdf/sdf2/start <==
4198400
==> /sys/block/sdf/sdf3/start <==
8394752
==> /sys/block/sdf/sdf4/start <==
64
$ head /sys/block/sdf/sdf*/size
==> /sys/block/sdf/sdf1/size <==
4194304
==> /sys/block/sdf/sdf2/size <==
4194304
==> /sys/block/sdf/sdf3/size <==
52166656
==> /sys/block/sdf/sdf4/size <==
1984
그것은 다음과 같습니다 parted
:
# parted /dev/sdf unit s print
Model: Patriot Memory (scsi)
Disk /dev/sdf: 60566016s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: pmbr_boot
Number Start End Size File system Name Flags
4 64s 2047s 1984s grub bios_grub
1 2048s 4196351s 4194304s fat32 freedos msftdata
2 4198400s 8392703s 4194304s ext2 boot lvm
3 8394752s 60561407s 52166656s ext2 iso lvm
이렇게 하면 올바른 오프셋으로 파티션을 쉽게 다시 만들 수 있습니다.
특별한 파티션 플래그(bios_grub, boot, esp...)가 있는 경우 이를 수동으로 제공해야 하지만 귀하의 경우 SSD에 있는 것처럼 보이지만 HDD에는 간단한 데이터 파티션만 있으므로 하나 뭔가에 대해 덜 걱정합니다.
/dev/sdb
파티션이 하나뿐 이므로 /dev/sdb1
1MiB에서 시작하여 디스크의 전체 크기로 확장될 가능성이 높습니다. 따라서 파티션을 다시 만드는 것이 이보다 쉬울 수는 없습니다. 그래도 다시 확인하는 것이 좋습니다.
또는 testdisk
원본 데이터에서 분할된 테이블을 파생할 수 있습니다.