создание разделов на USB-носителе

Обмен опытом по установке Линукс на разные аппаратные конфигурации

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение Olej » 12 июл 2012, 22:20

Olej писал(а):райней мере, не видел ни одну утилиту, после выполнения которой изменилось бы значение H/C/S,
Возможно оно изменится в результате того, что в народе называют "низкоуровневое форматирование", и массово практикуют для восстановления - http://forum.ubuntu.ru/index.php?topic=14223.0:
низкоуровневое форматирование:
dd if=/dev/zero of=/dev/sdX
это займёт для 1 гигабайта около 10 минут или около того
Хотя, как я понимаю, вовсе необязательно прописывать всю флешку и сидеть над ней 10 (20, 40, ... ;-) ) минут, достаточно прописать нулями несколько начальных секторов, возможно даже и 1, где позже будет находится MBR:

Код: Выделить всё

# dd if=/dev/zero of=/dev/sdX bs=512 count=1

Или 2048 + 1 ? ;-)
И почему это должно прописываться нулями? (а не 1 ... 255?)

Нужно будет попробовать как попадётся флешка, которую не жалко ;)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение Olej » 12 июл 2012, 22:25

Olej писал(а): Нужно будет попробовать как попадётся флешка, которую не жалко ;)

Код: Выделить всё

[olej@notebook 33D6-5316]$ sudo hdparm -g /dev/sdb
/dev/sdb:
 geometry      = 1018/31/62, sectors = 1957888, start = 0
Как легко видеть, прописывание того места где будет MBR никак на эти вещи не влияет:

Код: Выделить всё

[olej@notebook 33D6-5316]$ sudo dd if=/dev/zero of=/dev/sdb bs=512 count=1
1+0 записей считано
1+0 записей написано
 скопировано 512 байт (512 B), 0,0160921 c, 31,8 kB/c
[olej@notebook 33D6-5316]$ sync
[olej@notebook 33D6-5316]$ sudo fdisk -l /dev/sdb
Диск /dev/sdb: 1002 МБ, 1002438656 байт
31 heads, 62 sectors/track, 1018 cylinders, всего 1957888 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
На диске /dev/sdb отсутствует верная таблица разделов
Как то я предполагаю, что эти четыре параметра (H/C/S + sectors) прописаны где-то в контроллере флешки производителем, и считываются по IOCTL, а никак не из областей данных.
Таким же IOCTL что-то из них может быть и перезаписано (hdparm или чем-то подобным).

tundra37
Писатель
Сообщения: 149
Зарегистрирован: 03 мар 2012, 19:26
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение tundra37 » 13 июл 2012, 09:42

Вот как должно быть:
http://greenflash.su/publ/13-1-0-57
Т.ч. нигде внутри флешки контроллер ничего не записывает. Посмотреть "толкование" MBR и boot можно утилитой WinHex. Думаю для просмотра хватит и демо версии ;-) Прописывание флешки нулями увы плохо помогает. Я видел флешку, которая без ошибок прописывалась нулями, однако при тестировании те же самые нули писала с ошибками. В этом случае нужна инженерная утилита для истинного низкоуровневого форматирования.
Для экспериментов под Виндой очень полезна утилита flashnul - вы и копию можете снять перед экспериментами и нулями прописать и протестировать на ошибки и на "медленные" сектора - выдается средняя скорость и мин/макс . Под Линуксом прекрасно справляется команда dd, правда у меня все флешки единообразно размечены и MBR правильный. Кстати при случае посмотрю что там реально и что выдают другие утилиты.
Кстати сообразил, что метода писать на флешку образ ISO - это ужасное извращение. Просто программисты за вас позаботились, но лучше все-таки так не делать.

dmitriev
Писатель
Сообщения: 461
Зарегистрирован: 12 янв 2009, 19:36
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение dmitriev » 13 июл 2012, 18:38

tundra37 писал(а):Кстати сообразил, что метода писать на флешку образ ISO - это ужасное извращение. Просто программисты за вас позаботились, но лучше все-таки так не делать.
Может быть скажете как именно? Не прибегая ко всяким вспомогательным программам?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение Olej » 13 июл 2012, 18:42

tundra37 писал(а):Вот как должно быть:
http://greenflash.su/publ/13-1-0-57
1. там в статье http://greenflash.su/publ/13-1-0-57 нет абсолютно ничего нового... кроме того она безобразно написана ;)
Тогда уж куда интереснее: http://akina.hop.ru/mbr.php3

2. и вообще всё, что на ресурсе GreenFlash - делается и толкуется в терминологии Windows (типа: возьмите программу XXX и нажмите кнопку YYY) ... мне это неинтересно .
tundra37 писал(а):Вот как должно быть:
Т.ч. нигде внутри флешки контроллер ничего не записывает. Посмотреть "толкование" MBR и boot можно утилитой WinHex. Думаю для просмотра хватит и демо версии ;-)

3. посмотреть толкование MBR и BR можно и проще ... без всяких Windows-приблуд ;):
- запишем в файл копию MBR

Код: Выделить всё

[olej@notebook _TMP]$ sudo dd if=/dev/sdb of=mbr.bin bs=512 count=1
1+0 записей считано
1+0 записей написано
 скопировано 512 байт (512 B), 0,00137358 c, 373 kB/c
- запишем в файл копию BR

Код: Выделить всё

[olej@notebook _TMP]$ sudo dd if=/dev/sdb of=br.bin bs=512 skip=2048 count=1
1+0 записей считано
1+0 записей написано
 скопировано 512 байт (512 B), 0,00310504 c, 165 kB/c
- почему именно здесь?:

Код: Выделить всё

[olej@notebook _TMP]$ sudo fdisk -l /dev/sdb

Диск /dev/sdb: 1002 МБ, 1002438656 байт
21 heads, 52 sectors/track, 1792 cylinders, всего 1957888 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00011f3d

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1   *        2048     1957887      977920    6  FAT16
- записанное можем рассматривать просто в mc (F3 -> F4)...
- можно его здесь же редактировать в HEX (F3 -> F4 -> А2) + затем тем же dd так же успешно отправить назад в MBR или BR...

Но только нет нигде в описаниях формата MBR или BR упоминания, что там где-то записаны H/C/S!
http://ru.wikipedia.org/wiki/%C3%EB%E0% ... F%E8%F1%FC
Структура MBR
Структура главной загрузочной записи (MBR) Смещение Длина Описание
000h 446 Код загрузчика
1BEh 64 Таблица разделов
16 Раздел 1
1CEh 16 Раздел 2
1DEh 16 Раздел 3
1EEh 16 Раздел 4
1FEh 2 Сигнатура (55h AAh)

Код загрузчика
После завершения процедуры POST в ОЗУ по адресу 0x0000:0x7c00 записывается код загрузчика после чего ему передается управление. Задача загрузчика — проанализировать таблицу разделов жёсткого диска, затем либо передать управление загрузочному коду активного раздела, либо загрузить в RAM ядро операционной системы и передать ему управление.
Нет там нигде полей для геометрии H/C/S!
Если она внутри кода загрузчика, что вполне может быть, то тогда картина радикально зависит от того, какой загрузчик, и кто его записывал.
И тогда совершенно понятно, что разные менеджеры диска (gparted, fdisk, hdparm) видят разные H/C/S, потому, что каждый из них считает, что это именно его загрузчик, а в разных загрузчиках эти данные на разном смещении.

Или подскажите где есть такое упоминание, а именно смещения этих значений.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение Olej » 13 июл 2012, 19:19

Olej писал(а): - записанное можем рассматривать просто в mc (F3 -> F4)...
- можно его здесь же редактировать в HEX (F3 -> F4 -> А2) + затем тем же dd так же успешно отправить назад в MBR или BR...
MBR:
mbr.png
(92.49 КБ) 5623 скачивания
BR:
br.png
(109.6 КБ) 5622 скачивания
Вряд ли вы станете возражать, что это не MBR & BR ;-)

И где там искать H/C/S ?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение Olej » 13 июл 2012, 19:27

tundra37 писал(а):
Olej писал(а):
tundra37 писал(а):1) Про 2048 секторов - это выравнивание на границу 1 Мб. Микрософт вообще на 8 Мб выравнивает.
Зачем?
Можно ли это изменить?
Это "дыхальце" - когда меняем первичный раздел на логический - нужно +63 сектора. А вот почему так много - не знаю. Возможно для простоты счета, возможно буфер для изменения размера без потери данных, возможно это выравнивание на начало цилиндра - есть и такое.
Не так всё просто... 63 - это обычно в новых HDD секторов на дорожку, MBR в 1-м секторе, и вся остальная 0-я дорожка оставляется свободной (так было всегда для HDD, независимо от числа секторов на дорожку).
И для HDD:

Код: Выделить всё

[olej@notebook _TMP]$ sudo fdisk -l /dev/sda

Disk /dev/sda: 60.0 GB, 60022480896 bytes
255 heads, 63 sectors/track, 7297 cylinders, всего 117231408 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd961d961

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *          63      409662      204800   83  Linux
/dev/sda2          409663    92160062    45875200   8e  Linux LVM
/dev/sda3        92160063   117231407    12535672+  8e  Linux LVM
Начало 1-го раздела совпадает с sectors/track.

Почему для флешки это 2048, пусть это будет выравнивание на 1 Mb ... почему такое число?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение Olej » 13 июл 2012, 19:29

dmitriev писал(а):
tundra37 писал(а):Кстати сообразил, что метода писать на флешку образ ISO - это ужасное извращение. Просто программисты за вас позаботились, но лучше все-таки так не делать.
Может быть скажете как именно? Не прибегая ко всяким вспомогательным программам?
Да, это очень сильное утверждение, и поэтому его нужно бы аргументировать!
Любопытно ...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение Olej » 13 июл 2012, 20:01

tundra37 писал(а): Т.ч. нигде внутри флешки контроллер ничего не записывает. Посмотреть "толкование" MBR и boot можно утилитой WinHex. Думаю для просмотра хватит и демо версии ;-)
Я сильно предполагаю, что картина в точности до наоборот:

1. утилита-менеджер диска (fdisk, hdparm, gparted, все Windows GUI перделки ;-) ) запрашивает по ioctl() геометрию диска:
http://www.linuxcertif.com/man/4/sd/ru/
Доступны следующие вызовы ioctl:

HDIO_GETGEO

Возвращает параметры диска от BIOS в следующей структуре:

struct hd_geometry {
unsigned char heads;
unsigned char sectors;
unsigned short cylinders;
unsigned long start;
};


Указатель на эту структуру передаётся как аргумент ioctl(2).

Информация, возвращаемая в аргументе, является геометрией диска как это понимается в DOS! Это не есть физическая геометрия диска. Однако, она используется при формировании таблицы разделов на диске и необходима для удобной работы fdisk(1),efdisk(1), и lilo(1). Если информация о геометрии недоступна, все возвращаемые параметры будут равны нулю.

BLKGETSIZE
Возвращает размер устройства в секторах. Параметром ioctl(2) должен быть указатель на long.
(это драйвер SCSI, но как вы помните, USB флешки поддерживаются именно SCSI драйвером).
Здесь (в ioctl()) уже включена LBA BIOS трансляция, если нужно, и т.д.

2. уже получив по ioctl() H/C/S утилита-менеджер диска записывает собственный загрузчик, который учитывает эту геометрию.
Вот таким образм геометрия попадает в MBR & BR ...
Но только от разных утилит в разные загрузчики она попадает в разные места.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: создание разделов на USB-носителе

Непрочитанное сообщение Olej » 13 июл 2012, 23:00

Olej писал(а): Я сильно предполагаю, что картина в точности до наоборот:
Вот ещё интересная диагностика:

Код: Выделить всё

[olej@notebook _TMP]$ sfdisk --help
sfdisk (util-linux 2.19.1)
Использование: sfdisk [опции] устройство...
устройство: что-то вроде /dev/hda или /dev/sda
Полезные опции:
...
    -g [или --show-geometry]: вывод геометрии, трактуемой ядром
    -G [или --show-pt-geometry]: вывод геометрии, полученной из таблицы разделов
...
Вы можете перекрыть обнаруженную геометрию, используя:
    -C# [или --cylinders #]:установка числа используемых цилиндров
    -H# [или --heads #]:    установка числа используемых головок
    -S# [или --sectors #]:  установка числа используемых секторов

Код: Выделить всё

[olej@notebook _TMP]$ sudo sfdisk -G /dev/sdb
/dev/sdb: 1792 цилиндров, 21 головок, 52 секторов/дорожку
[olej@notebook _TMP]$ 
[olej@notebook _TMP]$ sudo sfdisk -g /dev/sdb
/dev/sdb: 1018 цилиндров, 31 головок, 62 секторов/дорожку
[olej@notebook _TMP]$ 
[olej@notebook _TMP]$ sudo hdparm -g /dev/sdb

/dev/sdb:
 geometry      = 1018/31/62, sectors = 1957888, start = 0
[olej@notebook _TMP]$ sudo fdisk -l  /dev/sdb

Диск /dev/sdb: 1002 МБ, 1002438656 байт
21 heads, 52 sectors/track, 1792 cylinders, всего 1957888 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00011f3d

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1   *        2048     1957887      977920    6  FAT16
Интересно, правда?

Ответить

Вернуться в «Железо для Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя