Linux (exfat-fuse) не может читать с внешнего диска exFAT GPT 4TB

955
Afforess

У меня 4Тб внешний WD RED. Он был отформатирован как диск exFAT на компьютере с Windows 10. У меня нет проблем с чтением файлов как с оригинального компьютера с Windows 10, так и с MacBook Pro 2017 года (High Sierra).

На любом компьютере с Linux, который я использую (Ubuntu 16.10 x64 + Slackware 14.2), система никогда не обнаруживает диск как читаемый или монтируемый. Смущает, что если я стираю и форматирую диск на моей машине с Linux как exFAT, то ни машина с Windows 10, ни MacBook не могут ее прочитать, хотя оба устройства с Linux могут. Это заставляет меня подозревать, что реализация exfat-fuse не завершена ... хотя, по общему признанию, я не знаю достаточно, чтобы быть уверенным.

[Как примечание, я также стер + форматированный как exFAT от MacBook Pro, и машина Windows 10 все еще могла читать / писать. Никакая машина Linux не смогла.]

Вот что я исследовал до сих пор:

sudo lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT ... sdj 8:144 0 3.7T 0 disk  ├─sdj1 8:145 0 6.4G 0 part  └─sdj2 8:146 0 7.3G 0 part  

Обратите внимание на размеры файловой системы мусора, которые обнаруживает lsblk. Том отформатирован только с 1 разделом exFAT, охватывающим все 4 ТБ.

parted -l /dev/sdj

Error: /dev/sdj: unrecognised disk label Model: WDC WD40 EZRZ-00GXCB0 (scsi)  Disk /dev/sdj: 4001GB Sector size (logical/physical): 512B/4096B Partition Table: unknown Disk Flags:  

parted по крайней мере достаточно честен, чтобы сказать, что понятия не имеет, с чем мы имеем дело. Он действительно определил модель, это WD красный 4 ТБ.

fdisk -l /dev/sdj

Disk /dev/sdj: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: dos Disk identifier: 0x3258a7ab  Device Boot Start End Sectors Size Id Type /dev/sdj1 1 76805 76805 37.5M ee GPT /dev/sdj2 77056 976754431 976677376 465.7G 7 HPFS/NTFS/exFAT 

Вывод fdisk интересен, потому что он почти правильный. Он отображает один раздел как метаданные GPT. С другой стороны, он правильно находит идентификатор (0x07 == данные Microsoft ), но его размер неверен. Размер раздела составляет 4 ТБ, а не 465,7 ГБ.

Я проверил, что раздел действительно занимает 4 ТБ, написав 4 ТБ тестового контента из Windows, и успешно прочитал весь контент обратно из MacBook Pro.

Попытка подключить любое из обнаруженных устройств не работает:

sudo mount.exfat-fuse -d /dev/sdj1 /mnt/foobar

FUSE exfat 1.2.4 ERROR: exFAT file system is not found. 

sudo mount.exfat-fuse -d /dev/sdj2 /mnt/foobar

FUSE exfat 1.2.4 ERROR: exFAT file system is not found. 

Даже в режиме отладки exfat-fuse не выводит никакой полезной информации. Глядя на источник, он проваливается очень рано, сразу после прочтения суперблока.

Я взглянул на первые 1 МБ данных на устройстве с hexdump, и это выглядит нормально, без явного мусора. (Pastebin: https://pastebin.com/BVLWW3kf )

Какие-нибудь дополнительные шаги отладки я должен попробовать? Есть идеи о том, что здесь происходит?

Редактировать:

Используя gdisk, похоже, накопитель имеет гибридный MBR + GPT. Однако gdisk обнаруживает GPT как недействительный:

sudo gdisk /dev/sdj GPT fdisk (gdisk) version 1.0.1  Partition table scan: MBR: hybrid BSD: not present APM: not present GPT: not present  *************************************************************** Found invalid GPT and valid MBR; converting MBR to GPT format in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if you don't want to convert your MBR partitions to GPT format! *************************************************************** 
1
Я подозреваю, что диск содержит таблицу разделов GPT И таблицу разделов MBR (не абсурдные размеры sdj1 и sdj2). В Windows и Mac будет использоваться GPT, в Linux MBR. Вы пробовали `gptsync` или друзей, чтобы исключить это? Eugen Rieck 6 лет назад 2
`gptsync` не может прочитать таблицу GPT: https://pastebin.com/r2GswgBL Вы правы, хотя он обнаружил таблицу MBR. Afforess 6 лет назад 0
Это могло бы объяснить это! Windows & Mac будет использовать таблицу разделов GPT, где только вторичная (резервная) версия существует без жалоб, а Linux - нет. Вы можете попробовать стереть начало и конец (таблицы разделов MBR, основной GPT, резервное копирование GPT), а затем разделить под Linux с помощью gdisk - это должно работать, я использовал его для обмена видеофайлами между Apple (редактирование) и Linux (вещание) Eugen Rieck 6 лет назад 0
Я попробую это - но мне любопытно, почему Linux считает GPT недействительным. Совершенно очевидно, что Windows и MacOS могут его прочитать. Afforess 6 лет назад 0
Таблица разделов GPT существует дважды - Windows и MacOS будут использовать ее, когда с одной копией все в порядке. Linux более осторожен Eugen Rieck 6 лет назад 0
Я уверен, что ядро ​​Linux будет использовать резервный GPT просто отлично. parted и gdisk непременно сообщат вам, что основной поврежден, и предложат восстановить его с помощью резервной копии. psusi 6 лет назад 0
Инструменты будут - но ядро ​​не будет автоматически определять разделы Eugen Rieck 6 лет назад 0
Я на самом деле не уверен, что с GPT что-то не так, похоже, что основная проблема - 512e против 4k, и что Linux считает, что диск 512e. Afforess 6 лет назад 0

1 ответ на вопрос

3
psusi

Кажется, проблема в том, что диск был разбит на части, как если бы это был диск с собственным размером сектора 4 КБ. GPT начинается с 4096 байтов. Поскольку это диск 512e, он должен начинаться с диска 512 байт. Я предполагаю, что по какой-то причине Windows неправильно определяет диск как 4kn.

Это * 4K диск с собственным размером сектора. WD сначала принял спецификацию 4ke (и это совершенно новый привод). Это Linux, который не обнаруживает это правильно. Afforess 6 лет назад 0
На самом деле, мне интересно, виноват ли в этом USB-корпус. Вывод `gdisk` имеет смысл, если вы умножите его на 8 (4096/512 -> 8), что предполагает, что инструменты linux читают его как 512e, когда он равен 4k. Afforess 6 лет назад 0
(Я проголосовал за этот ответ, но я не отмечаю его правильно, потому что, строго говоря, это не так. Это близко.) Afforess 6 лет назад 0
@Afforess, когда вы получаете доступ к нему через Windows, вы используете тот же корпус? Если нет, то это объясняет, откуда берется 512e: это корпус. psusi 6 лет назад 0
Я использовал тот же корпус. Afforess 6 лет назад 0
@Afforess, мне интересно, видит ли Windows это 4k или 512. Интересно, есть ли какой-то обходной путь, где, если он видит GPT, который утверждает, что это 4k, то он идет с этим вместо того, что говорит диск. psusi 6 лет назад 0
Есть ли простой способ узнать, как Windows видит диск? Afforess 6 лет назад 0

Похожие вопросы