LINUX.ORG.RU

Как прочитать данные с USB винта, который был разобран и подключен к SATA? Таблица разделов не соответствует действительности.


0

2

Есть внешний USB винт Transcend StoreJet 25M на 320G.
Точнее он был внешний. По непонятным причинам работа с ним была достаточно тормознутой (да, я в курсе, что USB медленнее чем SATA, т.е. более тормазнутой, чем должна была быть). Решил разобрать и подключить напрямую к SATA.
Внутри оказался SAMSUNG HM321HI 2AJ10001, который без проблем опознался BIOS'ом.

Только с разделами что-то не то:

aleksey@linux:~$ sudo parted /dev/sdb
GNU Parted 2.3
Использование /dev/sdb
Добро пожаловать в GNU Parted! Наберите 'help' для получения списка команд.

(parted) print                                                            
Модель: ATA SAMSUNG HM321HI (scsi)
Диск /dev/sdb: 320GB
Размер сектора (логический/физический): 512B/4096B
Таблица разделов: msdos

Число  Начало  Конец   Размер  Тип      Файловая система  Флаги
 1     32,3kB  40,0GB  40,0GB  primary
USB-SATA контроллер шифрует винт?

Там был 1 раздел на весь винт.
Свободно было около 15G, временно скинуть некуда.
Хотелось бы получить доступ к разделу, при этом чтобы винт остался подключенным к SATA.
Чего можно сделать?

При чем тут линукс?
- ФС ext4.
- Хотел отрезать свободное место в отдельный раздел, чтобы попробовать разных дистрибутивов.
- Может быть это косяк лнукса? Вражеской ОС у меня нет, проверить не могу.
Gparted показывает вот чего: http://img257.imageshack.us/img257/6106/devsdbgparted.png

★★★★★

Последнее исправление: ls-h (всего исправлений: 3)

Ответ на: комментарий от anonymous
aleksey@linux:~$ sudo mount /dev/sdb1 /mnt/tmp -t ext4 -o ro
mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error
       В некоторых случаях полезная информация может быть
       найдена в syslog - попробуйте dmesg | tail или что-то
       в этом роде
[ 3281.820063] EXT4-fs (sdb1): VFS: Can't find ext4 filesystem
[ 3476.458552] EXT4-fs (sdb1): VFS: Can't find ext4 filesystem
ls-h ★★★★★
() автор топика
Ответ на: комментарий от Deleted
aleksey@linux:~$ sudo fdisk -l /dev/sdb

Диск /dev/sdb: 320.1 ГБ, 320072933376 байт
255 heads, 63 sectors/track, 38913 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x9008a8b5

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1               1        4864    39070048+  83  Linux
Partition 1 does not start on physical sector boundary.

ls-h ★★★★★
() автор топика
Ответ на: комментарий от Insomnium

>Такое ощущение, что у вас нет поддержки ext4 в ядре. Что за дистр, ядро сами собирали?
У меня все было нормально когда винт был подключен по USB.

Ubuntu 10.10, ядро родное.

ls-h ★★★★★
() автор топика

У меня винт от WD нормально определялся как через USB, так и через SATA. Может это фишка конкретной модели, типа как флешки некоторые сразу делаются шифрованными?

strangeman ★★★★
()

Соберите в USB-карман обратно и покажите выхлоп parted винта по USB подключенного. Может ручками исправим в 0-ом секторе чтоб было как с USB?

adriano32 ★★★
()
Ответ на: комментарий от Deleted

Тьфу. Я имел ввиду «в USB-коробке был забит весь диск за исключением 15 гигов?», т.е. требуется выхлоп fdisk -l при диске, засунутом в USB-коробку.

Deleted
()

В коробке:

aleksey@linux:~$ sudo fdisk -l /dev/sdb
[sudo] password for aleksey: 

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.

Примечание: размер сектора - 4096 (не 512)

Диск /dev/sdb: 320.1 ГБ, 320072843264 байт
255 heads, 63 sectors/track, 4864 cylinders
Units = цилиндры of 16065 * 4096 = 65802240 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x9008a8b5

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1               1        4864   312560388   83  Linux
Partition 1 does not start on physical sector boundary.
aleksey@linux:~$ sudo parted /dev/sdb
GNU Parted 2.3
Использование /dev/sdb
Добро пожаловать в GNU Parted! Наберите 'help' для получения списка команд.
(parted) print                                                            
Модель: StoreJet Transcend (scsi)
Диск /dev/sdb: 320GB
Размер сектора (логический/физический): 4096B/4096B
Таблица разделов: msdos

Число  Начало  Конец  Размер  Тип      Файловая система  Флаги
 1     258kB   320GB  320GB   primary

Когда в коробке, то монтируется само. ФС ext4.

Хм... Размер сектора отличается в коробке и без нее. Что за фигня?

ls-h ★★★★★
() автор топика
Ответ на: комментарий от adriano32

>Это не спроста! Поддержка GPT в ядре есть/включена?
Поддержка есть. Ее наличие/отсутствие может помещать?
Почему когда винт не в коробке, то GPT нет, а в коробке есть?
Возможно она осталась от попыток установить Барсика...
Не думаю, что она на что-то влияет.

ls-h ★★★★★
() автор топика

контролер усбэшный причиной всему - fdisk -l

GomZaLeS
()
Ответ на: комментарий от ls-h

Попробуйте с SystemRescueCd смонтировать сам винт подключенный по SATA, там точно поддержка GPT есть и работает.
А так как в первом листинге партед явно написано «таблица мсдос» значит EPI GPT Support не работает ИМХО.

adriano32 ★★★
()
Ответ на: комментарий от adriano32

>А так как в первом листинге партед явно написано «таблица мсдос» значит EPI GPT Support не работает ИМХО.
Ядро то тоже самое и супорт в нем есть, это точно.
Видимо содержимое 0 сектора различается в зависимости от того, как подключен винт. Может он вообще в контроллере как нибудь хитро храниться?
fdisk ведь игнорирует GPT? Почему содержимое записей различно?

ls-h ★★★★★
() автор топика
Ответ на: В коробке: от ls-h

> По непонятным причинам работа с ним была достаточно тормознутой (да, я в курсе, что USB медленнее чем SATA, т.е. более тормазнутой, чем должна была быть)

Sector size (logical/physical): 4096 bytes / 4096 bytes

Partition 1 does not start on physical sector boundary.

Ну вот, ты сам ответил на свой вопрос ;)

Alan_Steel ★★
()
Ответ на: комментарий от ls-h

И выкиньте, пожалуйста, лично мне (для самообразования c GPT не работал ещё) дамп первых 34 секторов с блоком 512 байт и блоком 4096 байт (плюс если можно с конца то же 34 сектора так же)

# dd if=/dev/sdb of=/home/aleksey/dump_1 bs=512 count=34
# dd if=/dev/sdb of=/home/aleksey/dump_2 bs=4096 count=34
# dd if=/dev/sdb of=/home/aleksey/dump_3 bs=512 skip=625142239 count=34
# dd if=/dev/sdb of=/home/aleksey/dump_4 bs=4096 skip=78142751 count=34

adriano32 ★★★
()
Ответ на: комментарий от adriano32

>И выкиньте, пожалуйста, лично мне (для самообразования c GPT не работал ещё) дамп первых 34 секторов с блоком 512 байт и блоком 4096 байт (плюс если можно с конца то же 34 сектора так же)

Это когда он в коробке?

ls-h ★★★★★
() автор топика

Я так и не понял, чего сделать, чтобы получить доступ к разделу, когда винт торчит через SATA?

ls-h ★★★★★
() автор топика
Ответ на: комментарий от ls-h

на Вики написано что в GPT-таблице в 0 секторе записана «наследственная MBR», то есть там обычная MBR для таких как fdisk. В ней записано об одном разделе на весь диск. Если я правильно понял, там первый сектор этого раздела и количество записано с учётом 4096 секторов/а не 512, поэтому в 8 раз меньше получается размер винта (40 вместо 320)
Давайте посмотрим все вместе hex дамп нулевого сектора винта и убедимся в этом

# dd if=/dev/sdb of=/home/aleksey/dump_0 bs=512 count=1
# vi -b /home/aleksey/dump_0
:%!xxd
сделайте snapshot
:%!xxd -r
:q!

adriano32 ★★★
()
Ответ на: комментарий от ls-h

Без разницы, можно в USB-кармане, но тогда все 4 пункта обязательно

adriano32 ★★★
()
Ответ на: комментарий от ls-h

Снял через hexdump, боюсь я этого вашего vi... бр....

ls-h ★★★★★
() автор топика
Ответ на: комментарий от adriano32

Я был прав:

000001C0 01 00 83 FE FF FF 3F 00 00 00 C1 52 A8 04 00 00 ......?....R....
000001D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000001E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000001F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA ..............U.

--- dump_1 --0x100/0x4400--sector 0----------------------------------- 
первый сектор (3F 00 00 00) 0x0000003F = 63 сектор
последний (C1 52 A8 04) 0x04A852C1 = 78140097 сектор
выходит что действительно разделы с размером блока в 4096 байт из-за USB прослойки
Давайте попробуем переписать её чтоб номера секторов были с учётом 512 секторов? Естественно сделаем предварительно бэкап, поправим, ребутнемся, посмотрим результат, если не получится вернём на место

adriano32 ★★★
()
Ответ на: комментарий от adriano32

Давайте попробуем... Главное чтобы не накрылось ничего. :)
Спасибо, что помогаете!

ls-h ★★★★★
() автор топика
Ответ на: комментарий от adriano32

Честно говоря, я не совсем понял, винт с физическим размером в 4096 байт. Так в чем проблема?

ls-h ★★★★★
() автор топика
Ответ на: комментарий от ls-h

Мне чисто для опыта интересно. Ну и ЛОР комьюнити всё-таки!
Берите листик, надёжней листика с ручкой нет
hexedit установите, с ним удобней работать, прямо на винте редактируются байты

# hexedit -s /dev/sdb //(sdb-искомый винт, желательно подключить по SATA, ведь проверять будем уже без USB кармана)
//перепишите строку 000001C0 на листик, нолики перечёркивайте :)
//идея такая: у нас стартовый сектор 63 но 4096 байт размера, это соотвествует сектору 504 но 512 байт размера (63*8=504)
//конечный сектор 78140097 но 4096 байт размера, это соотвествует сектору 625120783 но 512 байт размера (78140097*8+7=625120783)
//на 8 множим так как 4096/512=8
//если видите нестыковки говорите сразу, я сейчас на ходу рассуждаю
//дальше правьте
//3F 00 00 00 C1 52 A8 04 на 
//F8 01 00 00 0F 96 42 25 
//так как 0x000001F8 = 504
//так как 0x2542960F = 625120783
Потом F2 и Ctrl+C и reboot в надежде на счастливое разрешение проблемы

adriano32 ★★★
()
Ответ на: комментарий от ls-h

В никсах не всё так гладко с 4096 байтными секторами
Вам сложно попробовать исправить 16 байт, имея их точных бекап в четырёх местах (ЛОР, у себя в /home, на шаремании, и у меня)? Если заработает, то потом будете екопать как заставить кернел нормально оперировать 4096 секторами. Найдёте, исправите обратно. Не заработает сейчас, тут же вернёте обратно.

adriano32 ★★★
()
Ответ на: комментарий от adriano32

>Берите листик, надёжней листика с ручкой нет
Спасибо, несколько позже приступлю к делу, а то скоро топать надо, а процесс ответственный...

Ламерский вопрос:
А нельзя как-нибудь указать размер логического сектора, чтобы сделать его 4096?
Тогда и править ничего не надо будет. Физически ведь винт с секторами в 4096 байт, обращения к нему как к 512 байтному не эффективны, насколько я понимаю.
А адресация внутри раздела как происходит? Ничего что поменяем?

Забыл сказать, что обязательно нужна возможность грузиться с него (в т.ч. и вражескую ОС возможно надо будет водрузить), иначе все это не имеет смысла.

ls-h ★★★★★
() автор топика
Ответ на: комментарий от adriano32

после ребута выкиньте сюда выхлоп parted, только прежде чем p сделайте unit s
Потом попробуйте смонтировать как обычно /dev/sdb1

adriano32 ★★★
()
Ответ на: комментарий от ls-h

Раз так, то лучше читайте о том как заставить кернел понимать 4096.
Для 4096 секторов 512 костыль конечно. Я просто писал тот длинный пост с расчётом что винт с 512 физ сектором, ещё не зная что у вас 4096.
Тогда конечно лучше разобраться с 4096!

А адресация внутри раздела как происходит? Ничего что поменяем?

в 0-ом секторе только границы раздела, к файловой системе отношения никакого не имеют

adriano32 ★★★
()
Ответ на: комментарий от ls-h

Кажется нашёл кое-что
У вас в dump_4 (вы поняли что я имею ввиду) есть метка «Системный раздел EFI C12A7328-F81F-11D2-BA4B-00A0C93EC93B»
А в dump_2 нет, это наводит на размышдения.
Скажите UUID ext4 раздела # ls -la /dev/disk/by-uuid

adriano32 ★★★
()
Ответ на: комментарий от adriano32
root@linux:~# ls -la /dev/disk/by-uuid|grep sdb1
lrwxrwxrwx 1 root root 10 2011-01-14 13:50 9f33822e-bc37-46c4-b1c9-298b7109a11d -> ../../sdb1

P.S. Пока отложил модификации, читаю разбираюсь...

ls-h ★★★★★
() автор топика

Подключил опять через SATA. Отдал диск TestDisk'у.
Он ничего не нашел. Ни одной партиции. Как так может быть?

ls-h ★★★★★
() автор топика

Есть такая фича у современных винтов - 4кб сектор. Обычно они работают в режиме эмуляции 512-байтного и дополнительная настройка не требуется. Но в твоём случае производитель посчитал, что его юсб-прослойка работает правильно с 4к и ладно. Тебе нужно либо переткнуть перемычку на харде чтобы он начал эмулировать 512 (может не сработать, точнее сместиться на 512 байт) либо настроить линуск или контроллер. Читал статью, щас попробую найти. Во: http://rlab.ru/doc/4k_hdd_for_linux.html Нечаянно ещё на лоре нашлась тема: http://www.linux.org.ru/forum/desktop/5652190

legolegs ★★★★★
()

я хоть и вендузятник, но r-studio мне помогала не раз данные спасать. в т.ч. и с ext4 у знакомого новообращенного в убунуту

dk-
()
Ответ на: комментарий от legolegs

>Тебе нужно либо переткнуть перемычку на харде чтобы он начал эмулировать 512
Так, насколько я понимаю, он и так эмулирует 512 байт, когда воткнут через SATA. А когда по USB, то контроллер позволяет только 4096.
Т.е. с линуксом ковыряться не надо, когда по USB, то оно и так работает с 4096 секторами.

ls-h ★★★★★
() автор топика
Ответ на: комментарий от adriano32

>Ну что там? Я вернулся, давайте править MBR!
А смысл править таблицу, если на винте не находятся разделы?
TestDisk не нашел ничего.

ls-h ★★★★★
() автор топика
Ответ на: комментарий от ls-h

смысл?
вы гоните! у вас никсы понимают MBR как для 512байт секторного диска, те ссылается на кусочек большого ext4 раздела
вы уверены что testdisk шарит GPT распознавать
я не успел на ВМ потестить gpart, но у вас в начале диска нет ни отметки системного EFI раздела, ни UUID вашего ext4, а вконце есть и то и то. А вообще в конце должна быть резервная копия. Наводит на мысль dd последние 34 сектора по 4096 в начало
Давайте пробовать! поменяете 16 байт, если не получиться вернёте, от вас убудет только время, не?

adriano32 ★★★
()
Ответ на: комментарий от adriano32

>вы уверены что testdisk шарит GPT распознавать
Там есть поиск разделов. При этом поиске он не шарит ни MBR, ни GPT.
Они игнорируются. Он ищет начало раздела по характерным признакам (magic-последовательностям). Эта функция как раз и нужна для того, чтобы находить разделы в случает _отсутсвия_ таблиц разделов.

Пробовать не против, но надо подумать.
Возможно не получится его опять засунуть в USB, или получится, но с геморроем.

ls-h ★★★★★
() автор топика
Ответ на: комментарий от ls-h

Слушайте, это безопасней чем пользоваться GParted. Вы вручную меняете 16 байт на винте. Имеете бэкап в четырёх местах (Торвальдс кивает головой и советует залить ещё и на фтп). Что мешает поправить эти 16 байт и ребутнуть. После ребута пробуете монтировать. Если не получиться, то тутже возвращаете на место эти 16 байт.

adriano32 ★★★
()
Ответ на: комментарий от ls-h

Блин, данные по секторам 4096, и в таблице разделов тоже адресовано всё по 4096 секторам. Вы были правы. Забираю свои слова. Простите если был груб в формулировках.

adriano32 ★★★
()
Ответ на: комментарий от ls-h

Было интересно разобраться. Жаль, что нормальное решение не нашлось.

ls-h ★★★★★
() автор топика
Ответ на: комментарий от ls-h

Если хотите сделайте то что хотел но нет времени у меня. На ВМ создайте GPT таблицу разделов. Сделайте ext4 раздел. Посмотрите hexedit'ом начало и конец диска. Будет ли и там и там UUID вашего раздела? Я конечно тоже это сделаю, но хз когда. Если и там и там будет, значит у вас начало диска стоило бы пофиксить.

adriano32 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.