Як відновити загублений розділ NTFS?


1

У мене в середині 2012 року Macbook pro 13 "Модель № A1278 (EMC 2554 *). Я запускаю MacOS Sierra 10.12 та Windows 10 Build 10240 на диску 750 Гб.

Не роблячи належних досліджень, я тупо використовував Disk Utility, щоб додати новий розділ 139 Гб на той же диск, на якому були MacOS і Bootcamp, і створив файлову систему як ExFat, тому що я хотів, щоб і мої MacOS, і Windows могли читати і писати на неї.

Ось, ось, Boot Camp вже не функціонував. У той час як MacOS все ще завантажується, розділ Boot Camp вже не відображається в меню параметрів завантаження, хоча це було в Disk Utlility та на робочому столі MacOS. Спроба завантажуватися безпосередньо з завантажувального камери показала таке повідомлення: Немає завантажувального пристрою --- вставити завантажувальний диск та натиснути будь-яку клавішу

Тому я дотримувався цього підручника: http://nerdr.com/bootcamp-partition-lost-repairing-mac-partitions/

Я вже знаю, що, можливо, я помилився, оскільки використовував підручник та відповідь з інших дописів на форумі ( https://discussions.apple.com/message/19071422#19071422 & я більше не можу завантажуватися в macOS після зміни розміру завантажувального камери перегородка ). Підручник з nerdr у посиланні вище говорить про використання gptfdisk, і я використовував термінальний додаток gdisk на основі відповіді на форумі.

Після дотримання процедури Nerdr саме з використанням gdisk, однак у неї були однакові параметри меню, тому я не знав, чи є різниця. Після того, як я закінчив, Bootcamp був повністю стертий. Тепер ось що gdisk відображається як моя нова таблиця розділів:

Command (? for help): p
Disk /dev/disk0: 1465149168 sectors, 698.6 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): DC08A243-0BDF-4D84-870F-044744CBFD1A
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1465149134
Partitions will be aligned on 8-sector boundaries
Total free space is 70891845 sectors (33.8 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              40          409639   200.0 MiB   EF00  EFI System Partition
   2          409640      1100019007   524.3 GiB   AF00  
   3      1100019008      1101288543   619.9 MiB   AB00  
   4      1101288544      1392987759   139.1 GiB   0700  
   5      1392987760      1394257295   619.9 MiB   AB00  Recovery HD

Ці термінальні виходи також можуть допомогти:

diskutil list:

   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *750.2 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS 750GB HD                563.0 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
   4:       Microsoft Basic Data TD                      149.4 GB   disk0s4
   5:                 Apple_Boot                         650.0 MB   disk0s5

diskutil cs list:
No CoreStorage logical volume groups found

Я думаю, що дані все ще є, вони просто відсутні в таблиці розділів. Як ви бачите, диск Recovery HD закінчується на секторі 1394257295, а останній доступний сектор - 1465149134. Він говорить, що вільного місця є 33,8 Гб, а розділ завантажувальної програми Windows склав близько 39 Гбіт, якщо я правильно пам'ятаю.

У мене немає нічого резервного копіювання чи часу роботи машини.

Я думав, що відновлення розділу, який я зробив, до оригінального розділу, може виправити. Мені не вдалося відновити розділ ExFat на жорсткому диску 750 Гб. Я отримую повідомлення "Процес відновлення не вдався" та наступний список команд: Перевірка цілі ... Перевірка джерела ... Перерозподіл цільового пристрою ... Об'єм джерела читається-записується і не може бути відключений, тому його не можна блокувати скопійовано Операція не вдалася…

Я отримую вищезгадане повідомлення знову і знову, навіть після його відключення, переформатування файлової системи під час перегляду MacOS тощо. Нарешті, я не знаю, чи завантажувався bootcamp за допомогою MBR або GPT, але диск мав на ньому папку Windows, якщо це допомагає.

Як відновити втрачений розділ NTFS?

Редагувати: вихід для Девіда Андерсона

введіть тут опис зображення

Немає результату для "dd, якщо = / dev / disk0 bs = 512 пропустити = 1394257296 кол = 50000000 | fgrep -o -a -b" BOOTMGR стиснуто ":


Коротка відповідь - Так, якщо жоден з розділів BootCamp не був перезаписаний. У вас справді є більше ніж одне питання. Ймовірно, ви повинні задати кілька окремих запитань, на кожне після відповіді на попереднє. Наприклад, я б запропонував запитати "Як відновити втрачений розділ NTFS". Можливо, наступне запитання: Як додати спільний том, який можна прочитати / записати і macOS, і Windows. "Також слід вказати модель / рік вашого Mac.
Девід Андерсон

1. GPT fdisk == gdisk 2. У вас є два hd-розділи відновлення (3 і 5). ІМХО абсолютно незрозуміло, що ви робили раніше для відновлення таблиці розділів. Я схильний до короткої відповіді "Ні", тому що, певно, частини вашого колишнього тома NTFS були перезаписані.
кланомат

@klanomath, як я вже говорив у публікації, я дотримувався підручника Nerdr, щоб спробувати відновити таблицю розділів за допомогою gDisk.
Mutant_Bunny

@DavidAnderson Добре, оновлено. чи можете ви допомогти мені відновити загублений розділ NTFS?
Mutant_Bunny

@Mutant_Bunny Підручник з nerdr не згадує другого HD для відновлення. Тому незрозуміло, коли і як це було створено.
кланомат

Відповіді:


1

Якщо вам потрібно краще пояснення будь-якого кроку, поданого нижче, будь ласка, опублікуйте коментар.

Відповідь, наведена нижче, передбачає розмір сектора в 512 байт. Для більших розмірів сектору вам потрібно буде внести відповідні корективи. Нижче наведено основні кроки, необхідні для пошуку та відновлення втраченого розділу Windows Boot Camp. Жоден з кроків не вимагає використання стороннього програмного забезпечення.

  1. Якщо можливо, відключіть захист цілісності системи (SIP). Вам потрібно зробити це, щоб отримати доступ до нього /dev/disk0. Іншими словами, вам потрібно вміти читати дані, що зберігаються на диску, з якого ви завантажуєтесь.

    Команда відключити SIP наведена нижче. Перед виконанням команди з програми Terminal вам потрібно буде завантажитися в один з декількох режимів відновлення macOS або на зовнішній диск запуску Mac .

    csrutil  disable
    

    Насправді, SIP не потрібно повністю відключати. Наступна недокументована версія csrutilкоманди може бути використана для принаймні відключення захисту файлової системи SIP.

    csrutil  enable  --without  fs
    

    Примітка. Я описав вищевказану команду лише під час роботи High Sierra (macOS 10.13.1).

    Після часткового або повного відключення SIP, завантажтесь назад до macOS (OS X).

    Примітка: rEFInd також може бути використаний для вибіркового відключення / включення SIP.

  2. Запустіть програму Terminal і введіть команду, подану нижче.

    sudo  chmod  a+w  /dev/disk0
    

    Це дозволяє вам читати (але не писати) /dev/disk0без попередніх команд sudo.

    Примітка. Цей доступ для читання буде видалений автоматично при перезапуску комп'ютера.

  3. Далі вам потрібно визначити, які сектори можуть містити ваш відсутній розділ NTFS. Це можна досягти, ввівши команду, подану нижче.

    gpt  -r  show  /dev/disk0
    

    Нижче наведено вихід з мого комп’ютера. Оскільки на моєму комп'ютері встановлені Fedora (linux) та rEFInd , вихідний результат буде відрізнятися від того, що було б типовим. Однак обсяг Windows NTFS все ще знаходиться в розділі 4, як очікувалося для iMac 2011 року.

    Marlin:~ davidanderson$ gpt -r show /dev/disk0
    gpt show: /dev/disk0: Suspicious MBR at sector 0
          start       size  index  contents
              0          1         MBR
              1          1         Pri GPT header
              2         32         Pri GPT table
             34          6         
             40     409600      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
         409640  585937496      2  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
      586347136    1269536      3  GPT part - 426F6F74-0000-11AA-AA11-00306543ECAC
      587616672  193097312      4  GPT part - EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
      780713984     409600      5  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
      781123584    1024000      6  GPT part - 0FC63DAF-8483-4772-8E79-3D69D8477DE4
      782147584  192528384      7  GPT part - E6D6D379-F507-44C2-A23C-238F2A3DF928
      974675968          8         
      974675976    1835008      8  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
      976510984     262144      9  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
      976773128          7         
      976773135         32         Sec GPT table
      976773167          1         Sec GPT header
    

    У вашому випадку ви можете замінити свій результат з gdisk. На що вам потрібно звернути увагу - це будь-яка велика кількість вільного місця. На вашому виході відображається вільний простір, починаючи з сектора 1394257296і закінчуючи сектор 1465149134. Це 70891839сектори, де є близько 36 ГБ вільного місця.

  4. Тепер ви готові розпочати пошук зниклого розділу NTFS. Щоб шістнадцятковий скинути перший сектор мого розділу Windows NTFS Boot Camp, я ввів команду, подану нижче.

    hexdump  -C  -v  -n  512  -s  587616672b  /dev/disk0
    

    Примітка: У наведеній вище команді, 587616672bв 587616672якій слід буква b. Це НЕ 5876166726 .

    Нижче наводиться вихід з вищевказаної команди.

    Marlin:~ davidanderson$ hexdump -C -v -n 512 -s 587616672b /dev/disk0
    460ca34000  eb 52 90 4e 54 46 53 20  20 20 20 00 02 08 00 00  |.R.NTFS    .....|
    460ca34010  00 00 00 00 00 f8 00 00  3f 00 33 00 a0 51 06 23  |........?.3..Q.#|
    460ca34020  00 00 00 00 80 00 80 00  5f 6e 82 0b 00 00 00 00  |........_n......|
    460ca34030  00 00 0c 00 00 00 00 00  02 00 00 00 00 00 00 00  |................|
    460ca34040  f6 00 00 00 01 00 00 00  f8 1a 1d 9e f0 ed 53 24  |..............S$|
    460ca34050  00 00 00 00 fa 33 c0 8e  d0 bc 00 7c fb 68 c0 07  |.....3.....|.h..|
    460ca34060  1f 1e 68 66 00 cb 88 16  0e 00 66 81 3e 03 00 4e  |..hf......f.>..N|
    460ca34070  54 46 53 75 15 b4 41 bb  aa 55 cd 13 72 0c 81 fb  |TFSu..A..U..r...|
    460ca34080  55 aa 75 06 f7 c1 01 00  75 03 e9 dd 00 1e 83 ec  |U.u.....u.......|
    460ca34090  18 68 1a 00 b4 48 8a 16  0e 00 8b f4 16 1f cd 13  |.h...H..........|
    460ca340a0  9f 83 c4 18 9e 58 1f 72  e1 3b 06 0b 00 75 db a3  |.....X.r.;...u..|
    460ca340b0  0f 00 c1 2e 0f 00 04 1e  5a 33 db b9 00 20 2b c8  |........Z3... +.|
    460ca340c0  66 ff 06 11 00 03 16 0f  00 8e c2 ff 06 16 00 e8  |f...............|
    460ca340d0  4b 00 2b c8 77 ef b8 00  bb cd 1a 66 23 c0 75 2d  |K.+.w......f#.u-|
    460ca340e0  66 81 fb 54 43 50 41 75  24 81 f9 02 01 72 1e 16  |f..TCPAu$....r..|
    460ca340f0  68 07 bb 16 68 52 11 16  68 09 00 66 53 66 53 66  |h...hR..h..fSfSf|
    460ca34100  55 16 16 16 68 b8 01 66  61 0e 07 cd 1a 33 c0 bf  |U...h..fa....3..|
    460ca34110  0a 13 b9 f6 0c fc f3 aa  e9 fe 01 90 90 66 60 1e  |.............f`.|
    460ca34120  06 66 a1 11 00 66 03 06  1c 00 1e 66 68 00 00 00  |.f...f.....fh...|
    460ca34130  00 66 50 06 53 68 01 00  68 10 00 b4 42 8a 16 0e  |.fP.Sh..h...B...|
    460ca34140  00 16 1f 8b f4 cd 13 66  59 5b 5a 66 59 66 59 1f  |.......fY[ZfYfY.|
    460ca34150  0f 82 16 00 66 ff 06 11  00 03 16 0f 00 8e c2 ff  |....f...........|
    460ca34160  0e 16 00 75 bc 07 1f 66  61 c3 a1 f6 01 e8 09 00  |...u...fa.......|
    460ca34170  a1 fa 01 e8 03 00 f4 eb  fd 8b f0 ac 3c 00 74 09  |............<.t.|
    460ca34180  b4 0e bb 07 00 cd 10 eb  f2 c3 0d 0a 41 20 64 69  |............A di|
    460ca34190  73 6b 20 72 65 61 64 20  65 72 72 6f 72 20 6f 63  |sk read error oc|
    460ca341a0  63 75 72 72 65 64 00 0d  0a 42 4f 4f 54 4d 47 52  |curred...BOOTMGR|
    460ca341b0  20 69 73 20 63 6f 6d 70  72 65 73 73 65 64 00 0d  | is compressed..|
    460ca341c0  0a 50 72 65 73 73 20 43  74 72 6c 2b 41 6c 74 2b  |.Press Ctrl+Alt+|
    460ca341d0  44 65 6c 20 74 6f 20 72  65 73 74 61 72 74 0d 0a  |Del to restart..|
    460ca341e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    460ca341f0  00 00 00 00 00 00 8a 01  a7 01 bf 01 00 00 55 aa  |..............U.|
    460ca34200
    

    Опис вищезазначених результатів можна знайти в Microsoft: NTFS Physical Structure або Wikipedia: NTFS Internals .

    У цьому секторі кілька рядків. Щоб знайти свій розділ NTFS, вам потрібно буде знайти один з цих рядків. Я випадково виберу рядок BOOTMGR is compressed. Оскільки я знаю, де мій розділ NTFS, я можу ввести команду нижче для пошуку цього рядка.

    dd  if=/dev/disk0  bs=512  skip=587616672  count=50000000  |  fgrep  -o  -a  -b  "BOOTMGR is compressed"
    

    Найбільша countцінність, яку мій комп'ютер дозволить, - це приблизно 50000000. Це значення може відрізнятися для вашого комп'ютера. Отже, якби я хотів шукати весь свій розділ NTFS, я повинен був би ввести цю команду 4 рази. Кожен раз зі skipзначенням збільшується на 50000000. Звичайно, можна написати скрипт оболонки з циклом, щоб повторити ці команди, але я відчуваю, що додавання такого сценарію тут не виходить за межі цієї відповіді.

    Вихід із введення вищевказаної команди на моєму комп’ютері наведено нижче.

    Marlin:~ davidanderson$ dd if=/dev/disk0 bs=512 skip=587616672 count=50000000 | fgrep -o -a -b "BOOTMGR is compressed"
    425:BOOTMGR is compressed
    338433776:BOOTMGR is compressed
    790493856:BOOTMGR is compressed
    1095625536:BOOTMGR is compressed
    1405559232:BOOTMGR is compressed
    3533975792:BOOTMGR is compressed
    3534741744:BOOTMGR is compressed
    4601366880:BOOTMGR is compressed
    6145609496:BOOTMGR is compressed
    6146292528:BOOTMGR is compressed
    6146951928:BOOTMGR is compressed
    6951738816:BOOTMGR is compressed
    8739643840:BOOTMGR is compressed
    8846594496:BOOTMGR is compressed
    9138315712:BOOTMGR is compressed
    9241170368:BOOTMGR is compressed
    21212440040:BOOTMGR is compressed
    50000000+0 records in
    50000000+0 records out
    25600000000 bytes transferred in 874.399247 secs (29277244 bytes/sec)
    

    Як і очікувалося, рядок був знайдений усередині першого пошукового сектора. Решту матчів можна проігнорувати.

    Якщо у вашому випадку ви введете команду, подану нижче, де я припускаю, що countзначення 50000000було б дійсним.

    dd  if=/dev/disk0  bs=512  skip=1394257296  count=50000000  |  fgrep  -o  -a  -b  "BOOTMGR is compressed"
    

    Примітка: Ви можете ввести "керування T" під час виконання ddкоманди. Це призведе до того, що ddкоманда відобразить її хід.

    Якщо ця команда не повертає збіг, ви можете припустити, що ваш розділ NTFS не є цілим.

  5. Перевірте, чи відповідає збіг у дійсному секторі завантаження розділів. Будь-яке задане значення відповідності може бути перетворене в початкове значення Boot Sector Boot, спочатку поділивши значення відповідності на bsзначення. Будь-який залишок можна викинути. Далі додайте skipзначення в результат. Це обчислюється нижче для мого першого значення відповідності 425.

    425 / 512 + 587616672 = 587616672
    

    Далі введіть команду для шестнадцяткового скидання обчисленого сектора. Для мого комп'ютера команда та вихід відображаються на кроці 4. Для цього -sпараметра вам потрібно буде замінити початкове значення сектора. Не забудьте додати лист bдо вашої вартості.

    Мінімально сектор повинен починатися з шестигранної послідовності eb 52 90 4e 54 46 53 20 20 20 20 00і закінчуватися шестигранною послідовністю 55 aa. Інші значення для перевірки можна знайти у посиланнях, наведених у кроці 4.

  6. Визначте значення початку та розміру розділу NTFS. Стартове значення розділу є таким же, як і початкове значення Sector Boot Sector. Щоб визначити розмір, вам потрібно буде придбати 8 шістнадцяткових байтових значень, збережених у завантажувальному секторі розділу, починаючи з 41-го значення. У моєму секторі завантаження розділів, показаному на кроці 4, ці значення показані нижче.

    5f 6e 82 0b 00 00 00 00
    

    Далі вам потрібно буде перетворити з маленького ендіана на великий ендіан, змінивши порядок байтів, як показано нижче.

    00 00 00 00 0b 82 6e 5f
    

    Перетворіть ці значення в одинарне шістнадцяткове значення, видаливши пробіли та попередні нулі, додавши 0xпочаток результату. Зробіть так, що для наведених вище значень призводить до одиничного значення, показаного нижче.

    0xb826e5f
    

    Визначте десятковий еквівалент за допомогою команди, показаної нижче.

    Marlin:~ davidanderson$ echo $((0xb826e5f))
    193097311
    

    Нарешті, округлюємо це значення до найближчого цілого числа, що ділиться на 8. У цьому випадку 193097311воно не ділиться на 8. Отже, це значення потрібно округлювати до значення 193097312.

    Для тих, хто не знав, значення ділиться на 8, якщо останні три цифри ділиться на 8. У цьому випадку, 311/8=38.875і 312/8=39, значить 193097311, не ділиться 8, але 193097312є.

  7. Додайте знайдений розділ до таблиці розділів GUID (GPT). Якщо цей розділ ще не існував на моєму комп'ютері, я міг би додати його, ввівши команду, показану нижче. У вашому випадку ви б використали опцію індексу -i 6замість -i 4. Також значення вашого варіанту початкового сектору -bта розміру -sбули б різними.

    sudo  gpt  -f  add  -i  4  -b  587616672  -s  193097312  -t  windows  /dev/disk0
    

    На моєму комп’ютері працює macOS 10.13.1. Ця команда може не виконуватись, якщо використовується ОС X або більш рання версія macOS. Якщо це так, вам потрібно спочатку запуститись з відновлення macOS через Інтернет або зовнішній диск запуску Mac , а потім виконати альтернативну команду, подану нижче, від програми Terminal. Знову ж , ваше -i, -bі -sзначення параметра , буде відрізнятися від того , що показано нижче.

    gpt  add  -i  4  -b  587616672  -s  193097312  -t  windows  /dev/disk0
    

    Ще одна альтернатива - використовувати gdiskдля додавання розділу до GPT.

    Примітка. Після редагування GPT може знадобитися перезавантаження комп'ютера.

  8. При необхідності ввімкніть SIP. Для цього потрібна та сама процедура, що і для кроку 1, за винятком того, що команда для включення SIP показана нижче.

    csrutil  enable
    

@Mutant_Bunny: Мої вказівки просять вас ввести команду:dd if=/dev/disk0 bs=512 skip=1394257296 count=50000000 | fgrep -o -a -b "BOOTMGR is compressed"
Девід Андерсон

Привіт, Девід Андерсон, я почав пробувати цю інструкцію. Я застряг на кроці 5. Я не знаю, як діяти, тому що я не розумію, що означають цифри чи як робити математику, яку ви там відображали. Я спробував прочитати розділи Windows NTFS та вікіпедії, які ви пов’язали, але все ще не розумію. будь ласка, дивіться мою оригінальну публікацію для редагування з моїми виходами з попередніх кроків ....
Mutant_Bunny

Немає результату для "dd, якщо = / dev / disk0 bs = 512 пропустити = 1394257296 кол = 50000000 | fgrep -o -a -b" BOOTMGR стиснуто "
Mutant_Bunny

@Mutant_Bunny: Ну, як я вже заявив на кроці 4: Якщо ця команда не повертає збіг, ви можете припустити, що ваш розділ NTFS не є цілим. Принаймні початок обсягу NTFS було перезаписано. Ви не можете відновити гучність. Будь-яке відновлення файлів було б надзвичайно важким.
Девід Андерсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.