วิธีแก้ไขพาร์ติชันฮาร์ดไดรฟ์ Mac ที่แสดงเป็น Fdsik_partition_scheme


8

สถานการณ์ของฉันดูเหมือนจะคล้ายกับวิธีแก้ไขฮาร์ดไดรฟ์ GUID ที่เสียหายกับ MBRแต่มีความแตกต่างมากพอที่ฉันไม่สามารถรวบรวมโซลูชันที่มั่นใจได้

ฉันมีไดรฟ์โตชิบา 3TB ในกล่อง USB ที่ใช้กับ Mac ที่มี OS X El Capitain 10.11.3

ติดตั้งไดรฟ์ด้วยพาร์ติชันเดียว ไดรฟ์ไม่สามารถบู๊ตได้และไม่ได้ติดตั้งระบบดังนั้นฉันคิดว่ามันจะไม่มีพาร์ติชั่นการกู้คืนด้วย ฉันไม่สามารถพูดได้อย่างแน่นอนว่ามันไม่เคยติดตั้งระบบ แต่ฉันไม่คิดอย่างนั้น ไม่ได้ใช้กับ Bootcamp หรือบนคอมพิวเตอร์ที่ไม่ใช่ Mac

ไดรฟ์ใช้งานได้ตามปกติเป็นเวลานาน แต่ไม่สามารถจดจำได้เมื่อเร็ว ๆ นี้ เกี่ยวกับการตรวจสอบกับ Utility Disk ก็แสดงให้เห็นว่ามีประเภทพาร์ทิชันของFDisk_partition_scheme ฉันแน่ใจว่ามันเดิมเริ่มต้นโดยทั่วไปของGUID Partition แผนที่จัดรูปแบบเป็นOS X ขยาย (Journaled)

ฉันไม่สามารถนึกถึงการใช้งานหรือเหตุการณ์เฉพาะใด ๆ ที่อาจทำให้เกิดการเปลี่ยนแปลง

นี่คือข้อมูลที่ฉันรวบรวมจากไดรฟ์

รายการ diskutil / dev / disk6

/dev/disk6 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *3.0 TB     disk6
   1:                       0xEE                         375.1 GB   disk6s1

ข้อมูล diskutil / dev / disk6

   Device Identifier:        disk6
   Device Node:              /dev/disk6
   Whole:                    Yes
   Part of Whole:            disk6
   Device / Media Name:      DT01ABA300

   Volume Name:              Not applicable (no file system)

   Mounted:                  Not applicable (no file system)

   File System:              None

   Content (IOContent):      FDisk_partition_scheme
   OS Can Be Installed:      No
   Media Type:               Generic
   Protocol:                 USB
   SMART Status:             Not Supported

   Total Size:               3.0 TB (3000592982016 Bytes) (exactly 5860533168 512-Byte-Units)
   Volume Free Space:        Not applicable (no file system)
   Device Block Size:        512 Bytes

   Read-Only Media:          No
   Read-Only Volume:         Not applicable (no file system)

   Device Location:          External
   Removable Media:          No

   Virtual:                  No
   OS 9 Drivers:             No
   Low Level Format:         Not supported

fdisk / dev / disk6

Disk: /dev/disk6    geometry: 97451/255/63 [1565565872 sectors]
Signature: 0xAA55
         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: EE 1023 254  63 - 1023 254  63 [         1 -  732566645] <Unknown ID>
 2: 00    0   0   0 -    0   0   0 [         0 -          0] unused
 3: 00    0   0   0 -    0   0   0 [         0 -          0] unused
 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused

GPT กู้คืน / dev / disk6

gpt recover: /dev/disk6: no primary or secondary GPT headers, can't recover

gpt -r -vv show / dev / disk6

gpt show: /dev/disk6: mediasize=3000592982016; sectorsize=512; blocks=5860533168
gpt show: /dev/disk6: PMBR at sector 0
       start        size  index  contents
           0           1         PMBR
           1  5860533167

gdisk / dev / disk6

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

นี่คือภาพหน้าจอของส่วนแรกของไดรฟ์ใน wxHexEditor ส่วนของ EFI เริ่มต้นที่ 4096

เริ่มต้นของไดรฟ์ใน wxHexEditor

ฉันเริ่มมองหาสตริง HFSJ เริ่มต้นที่ออฟเซ็ตของ 409642 ตามที่แนะนำในคำตอบอื่น ๆ แต่ไม่พบมันใกล้ ๆ นั้น ดังนั้นฉันค้นหาโดยเริ่มจากจุดเริ่มต้นของไดรฟ์และพบสิ่งที่เกิดขึ้นครั้งแรกที่ offset 314598400

อย่างไรก็ตามถ้าฉันค้นหา HFSJ ต่อไปฉันจะพบว่ามีหลายสิ่งที่ดูเหมือนกันและมีพื้นที่ว่างรอบตัวพวกเขาเป็นศูนย์เหมือนอย่างแรก เริ่มต้นที่ 360424448 และแยกห่างกัน 32768 ตัวอย่างเช่นที่ออฟเซ็ต 360424448 360457216 360489984 360522752 360555520

ฉันใช้การค้นหาทั้งหมดใน wxHexEditor และหยุดหลังจากสองสามนาที ณ จุดนั้นมันพบว่ามีสองพัน ฉันไม่แน่ใจว่าจะทำสิ่งเหล่านั้นได้อย่างไร

ฉันยังสามารถหาส่วนที่มีชื่อว่าEFI System Partitionที่ offset 3000592961536 ซึ่งแสดงชื่อของไดรฟ์ที่มีชื่อว่า "Rosie"

ต่อไปนี้เป็นภาพหน้าจอของพาร์ติชัน HFSJ แรกและพาร์ติชันระบบ EFI เพิ่มสกรีนช็อตของออฟเซ็ต 8192 ตามความคิดเห็น

พาร์ติชัน HFSJ แรกพาร์ติชัน EFI ที่ส่วนท้ายและออฟเซ็ต 8192

ขอบคุณสำหรับความช่วยเหลือ


หากปรากฏว่าดิสก์ของคุณมีขนาดบล็อก 4096 ไบต์และตอนนี้มีขนาด 512 ไบต์ เนื่องจากขนาดบล็อกไม่ได้เก็บไว้ในดิสก์คำถามของฉันจะเป็น: คุณเปลี่ยนฮาร์ดแวร์ด้วยวิธีใด? นอกจากนี้หากขนาดบล็อกเป็น 4096 ไบต์คุณควรจะสามารถอ่านรายการตาราง GPT แบบเก่าเริ่มต้นที่ 8192 ไบต์ จนถึงตอนนี้คุณเพิ่งโพสต์หัวข้อ GPT เริ่มต้นที่ 4096 ไบต์ ทิ้งฐานสิบหกสามารถแปลงกลับเป็นค่าทศนิยมที่ถูกต้องโดยใช้ข้อมูลที่ได้รับที่นี่
David Anderson

@DavidAnderson ฮาร์ดแวร์มีการเปลี่ยนแปลงที่ไดรฟ์อยู่ในกรณี USB ที่แตกต่างกัน ฉันสามารถหาเคสดั้งเดิมได้ถ้ามันช่วยอะไรได้
Doug Smith

@DavidAnderson ฉันเปลี่ยนภาพหน้าจอเพื่อเพิ่มหนึ่งภาพสำหรับออฟเซ็ต 8192 ซึ่งแสดงพาร์ติชันระบบ EFI ที่นั่น
Doug Smith

@klanomath ใช่คำตอบที่เชื่อมโยงของคุณถูกต้อง ฉันผสมบล็อกและออฟเซ็ต แม้ว่ามันจะมีค่าเป็นศูนย์รอบ ๆ ชดเชย 209736704 ฉันยังลองหารด้วย 8 (26217088) ในกรณีที่มีปัญหาขนาดบล็อก 4096 นั่นทำให้ฉันอยู่ในข้อมูลจำนวนมาก แต่ไม่มีสตริง HFSJ ในสายตา
Doug Smith

@ kanomath ฉันเริ่มกระบวนการของคุณแล้ว ความพยายามของฉันที่จะเขียนทับบล็อก 40 รายการแรกไม่ได้เขียนข้อมูลจริง ๆ :0+0 records in 0+0 records out 0 bytes transferred in 0.000013 secs (0 bytes/sec)
Doug Smith

คำตอบ:


9

โปรดลองสิ่งต่อไปนี้:

  • รับตัวระบุดิสก์ของไดรฟ์ 3 TB ภายนอกของคุณ

    diskutil list
    

    ด้านล่างผมถือว่าตัวระบุดิสก์คือ disk6

  • unmount ดิสก์:

    diskutil umountDisk disk6
    
  • เขียนทับบล็อก 40 รายการแรก:

    sudo dd if=/dev/zero of=/dev/disk6 bs=512 count=40
    
  • สร้าง GPT ใหม่:

    sudo gpt create /dev/disk6
    
  • ตรวจสอบข้อมูลดิสก์ด้วย:

    diskutil info /dev/disk6
    

    โปรดมั่นใจว่าขนาดบล็อกอุปกรณ์ยังคงเป็น 512 ไบต์

    คุณอาจใช้

    sudo gpt -r show /dev/disk6
    

    หาก GPT แสดง:

       start        size  index  contents
           0           1         PMBR
           1           1         Pri GPT header
           2          32         Pri GPT table
    

    คุณมีตัวควบคุมดิสก์และดิสก์ซึ่งรายงานขนาดบล็อกแบบลอจิคัลที่ 512 ไบต์ โปรดดำเนินการในขั้นตอนต่อไป

    หาก GPT แสดง:

       start        size  index  contents
           0           1         PMBR
           1           1         Pri GPT header
           2           4         Pri GPT table
    

    คุณมีตัวควบคุมดิสก์และดิสก์ซึ่งรายงานขนาดบล็อกแบบลอจิคัลของ 4096 ไบต์ กรุณาหยุดที่นี่และเพิ่มความคิดเห็น

  • สร้างรายการ EFI ใหม่ด้วย:

    sudo gpt add -b 40 -i 1 -s 614400 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    

    ขึ้นอยู่กับขนาดของดิสก์และรุ่นของระบบที่มีขนาดแตกต่างกันของไดรฟ์ข้อมูล EFI ที่สร้างขึ้นหากมีการแบ่งพาร์ติชันด้วย Disk Utility: หนึ่งที่มีขนาด 200 MiB หรือหนึ่งที่มี 300 MiB ที่นี่เห็นได้ชัดว่าดิสก์ของคุณมี 300 MiB EFI และอาจ 4096 ไบต์ของพื้นที่ดิสก์ที่ไม่ได้ถูกจัดสรร: (314598400-1024) / 512 = 614448 (= ปริมาณบล็อกหลักเริ่มต้น) 614448-40-8 = 614400 (= ขนาดของ EFI)

  • สร้างโวลุ่มหลักของคุณใหม่ด้วย:

    sudo gpt add -b 614448 -i 2 -s SizeOfVolume1 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    

    ขนาดของปริมาณหลักสามารถกำหนดได้โดยรายการแรก (เสียหาย & เก่า) ของตาราง GPT ที่สอง: (3000592961536/512) = 5860533128 คือหมายเลขบล็อก จากนั้นคำนวณขนาดโดย 5860533128-614448 = 5859918680 บล็อก เนื่องจาก 5859918680 สามารถหารด้วย 8 (ขนาดบล็อกฟิสิคัล 4096 / ขนาดบล็อกโลจิคัล 512) นี่เป็นการเดาที่ดีสำหรับขนาดโวลุ่ม

    การเดาที่ดีที่สุดคือ:

    sudo gpt add -b 614448 -i 2 -s 5859918680 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    

    การเดาที่ดีที่สุดอันดับสองคือ:

    sudo gpt add -b 614448 -i 2 -s 5859918672 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    
  • อาจเป็นเพราะวอลลุ่มของคุณหายไป ตรวจสอบระดับเสียงด้วย:

    diskutil verifyVolume disk6s2
    

    หากจำเป็นให้ลองแก้ไขระดับเสียง

    diskutil repairVolume disk6s2
    

เนื่องจากคุณย้ายดิสก์ "ที่เสียหาย" ไปยังตัวพิมพ์เล็กและตัวควบคุมดิสก์ขนาดบล็อกแบบโลจิคัลจึงถูกแก้ไข แผนผังพาร์ติชันเก่าอาจขึ้นอยู่กับขนาดบล็อกแบบลอจิคัลของ 4096 ไบต์

ในการกู้คืนพาร์ติชันแผนที่ในกรณีเก่า (4096b) คุณจะต้องป้อนข้อมูลต่อไปนี้เพื่อกู้คืน GPT (ตามคำตอบของ David Anderson):

  • สร้าง GPT ใหม่:

    sudo gpt create /dev/disk6
    
  • สร้างรายการ EFI ใหม่ด้วย:

    sudo gpt add -b 6 -i 1 -s 76800 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    
  • สร้างโวลุ่มหลักของคุณใหม่ด้วย:

    sudo gpt add -b 76806 -i 2 -s 732457067 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    
  • แผนผังพาร์ติชั่นสุดท้ายจะเป็นดังนี้:

     sudo gpt -r show disk1
           start        size  index  contents
               0           1         PMBR
               1           1         Pri GPT header
               2           4         Pri GPT table
               6       76800      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
           76806   732457067      2  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
       732533873       32768         
       732566641           4         Sec GPT table
       732566645           1         Sec GPT header
    

จาก 4096b ส่วนนี้ "retranslates" หลังจากติดตั้งดิสก์ในกรณีขนาดบล็อกตรรกะ 512b ไปที่:

  • สร้าง GPT ใหม่:

    sudo gpt create /dev/disk6
    
  • สร้างรายการ EFI ใหม่ด้วย:

    sudo gpt add -b 48 -i 1 -s 614400 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/disk6
    
  • สร้างโวลุ่มหลักของคุณใหม่ด้วย:

    sudo gpt add -b 614448 -i 2 -s 5859656536 -t 48465300-0000-11AA-AA11-00306543ECAC /dev/disk6
    

สิ่งนี้แตกต่างจากส่วนแรก (ยอมรับ) ของคำตอบของฉัน แต่เป็นคำตอบที่ถูกต้อง! เนื่องจาก EFI จริง ๆ แล้วเป็น "ว่างเปล่า" และบล็อกที่ไม่ได้ถูกจัดสรร 262144 มีค่าเป็นศูนย์เท่านั้นคำตอบที่ "ผิดปกติ" ไม่ส่งผลกระทบต่อการทำงานของไดรฟ์


2

นี่ไม่ใช่คำตอบ แต่เป็นตัวอย่างของวิธีการแยกข้อมูลพาร์ติชัน GPT จากข้อมูลที่คุณนำเสนอ รายการพาร์ติชัน GPT สำรอง (สำรอง) ถูกใช้เนื่องจากคุณไม่ได้โพสต์เนื้อหาของรายการพาร์ติชัน GPT หลัก เอกสาร " GUID Partition Table " ถูกใช้เพื่อตีความข้อมูล

LBA ที่ใช้งานล่าสุดสามารถพบได้ในส่วนหัวของ GPT สิ่งนี้เกิดขึ้นที่ที่อยู่ 8244 ค่าคือ

70 14 aa 2b 00 00 00 00 little endian = 0x2baa1470 = 732566640 @ 4096 bytes/block.

การเริ่มต้นของรายการ GPT รอง (สำรอง) เริ่มต้นที่บล็อกถัดไป ค่าคือ

(732566640 + 1) * 4096 = 3000592961536 bytes.  

การใช้สิ่งนี้เป็นจุดเริ่มต้นของรายการตารางพาร์ติชัน EFI ฉันได้รับค่าต่อไปนี้ เริ่มต้นพาร์ติชัน EFI ซึ่งอยู่ที่ที่อยู่ 3000592961568 คือ

06 00 00 00 00 00 00 00 little endian = 0x6 = 6 @ 4096 bytes/block.

จุดสิ้นสุดของพาร์ติชัน EFI อยู่ที่ที่อยู่ 3000592961576 คือ

05 2c 01 00 00 00 00 00 little endian = 0x12c05 = 76805 @ 4096 bytes/block.

ซึ่งให้ขนาดพาร์ติชันของ

76805 - 6 + 1 = 76800 @ 4096 bytes/block.

เริ่มต้นพาร์ติชัน HFS ซึ่งอยู่ที่แอดเดรส 3000592961696

06 2c 01 00 00 00 00 00 little endian = 0x12c06 = 76806 @ 4096 bytes/block.

จุดสิ้นสุดของพาร์ติชัน HFS พบได้ที่ที่อยู่ 3000592961704 คือ

70 94 a9 2b 00 00 00 00 little endian = 0x2ba99470 = 732533872 @ 4096 bytes/block.

ซึ่งให้ขนาดพาร์ติชันของ

732533872 - 76806 + 1 = 732457067 @ 4096 bytes / block.

หากคุณจะใช้ขนาดบล็อก 512 ไบต์ผลลัพธ์ข้างต้นจะต้องถูกคูณด้วยค่า 8 เพื่อแปลงเป็น 512 ไบต์ / บล็อก


+1 เราได้รับขนาดและบล็อกเริ่มต้นที่เหมือนกันสำหรับ EFI และบล็อกเริ่มต้นที่เหมือนกัน แต่ขนาดต่างกันของปริมาณหลัก
klanomath
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.