Счетчик посещений

mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterСегодня229
mod_vvisit_counterВчера2600
mod_vvisit_counterЭта неделя7737
mod_vvisit_counterПрошлая неделя7785
mod_vvisit_counterЭтом месяце21980
mod_vvisit_counterПрошлый месяц35949
mod_vvisit_counterВсего730509

Ваш IP: 38.107.179.226
 , 
Программный ремонт USB flash в Linux. Печать E-mail
Рейтинг пользователей: / 0
ХудшийЛучший 
Статьи
Автор: kLuNkeR   
01.02.2008 14:50

Сегодня речь пойдет о так называемом "программном ремонте" USB flash накопителей. Вопросы аппаратного ремонта рассматриваться не будут по причине копеечной стоимости новых абсолютно исправных устройств; вопрос же снятия данных с неисправных флешей не рассматривается из-за отсутствия у автора желания публично его рассматривать :) .

Поводом для написания статьи послужило обилие на различных форумах советов по устранению программных глюков флешек с помощью различных утилит "низкоуровневого форматирования" и пр. Не отрицая существования утилит "от производителя", хочу заметить, что существует весьма простой и вполне надежный метод удаления софт-бэдов на флешках, устранения проблем с файловой системой, бутсектором и MBR, возникающих, как правило, при небезопасном извлечении этих устройств из компьютера, либо же из-за иных программных или аппаратных сбоев компьютера (одни только глючные южные мосты ICH5 от Intel чего стоят).

Существующие методы "излечения" этих болезней под ОС Microsoft Windows имеют ряд существенных недостатков, причиной которых является отсутствие в Windows достаточно функциональных средств дискменеджмента даже от сторонних производителей. Простой пример: после "заливки" флешки нулями, Windows форматирует её как super-floppy, т. е. без организации MBR, что для корректной работы флешки под разными ОС недопустимо. Сторонние дискменеджеры либо не умеют работать с USB-устройствами (Norton Partition Magic), либо работают некорректно (Paragon Partition Manager). Работа же с флешкой под различными ОС ведется именно как с жестким диском, поэтому и предъявляемые требования к организации логической структуры аналогичны винчестеру, а не дискете. Для этих целей воспользуемся правильной ОС и правильным софтом, который, как оказалось, к тому же абсолютно бесплатен, в отличие от недофункциональных платных поделок. 

Итак... Имеет место флешка, которая либо виснет в Windows, либо просится быть отформатированной, но не форматируется ("Виндовз не может завершить форматирование", о, ужас!), либо сыплет бэдами при сканировании тем же HDDScan'ом.

Если с Линуксом вы незнакомы, то я предложу для начала выкачать один из LiveCD-дистрибутивов и, предварительно записав образ на CD, загрузиться с него. Я, как Слаковод, естественно, предложу Slax - он невелик по размерам, несложен (впрочем, как и всякий LiveCD общего назначения) , быстро грузится и в нем есть всё необходимое для "ремонта". Если же какой-либо из Линуксов у вас уже стоит на HDD и вы с ним дружите, то буду рад добавить в вашу копилку знаний еще несколько советов.

Лично мной работа велась под локализованным неофициальным портом Slackware для 64-битных процессоров BlueWhite64

Немного о форматировании: сейчас пойдут большие куски кода. В блоке мы будем показывать вывод консоли, подчёркнутым  - наш ввод. Сразу за решеткой жирным - #мои комментарии.

Итак, загрузились. Если вы не root, то станьте им , выполнив команду su и введя пароль , ибо борьба с ополоумевшим железом по праву только суперпользователю :) .

Подключаем флешку, смотрим список USB-устройств. Вводим lsusb, нажимаем Enter, смотрим вывод:

 root@H84_103:~# lsusb
#Наблюдаем вывод: вот она, родимая, даже, вроде "аппаратно" живая.
Bus 005 Device 003: ID 0ea0:2168 Ours Technology, Inc. Transcend JetFlash 2.0 / Astone USB Drive
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
#Это сканер, он нам не мешает.
Bus 001 Device 003: ID 04a5:20fc Acer Peripherals Inc. (now BenQ Corp.) Benq 5000
Bus 001 Device 001: ID 0000:0000

Флеш-накопители распознаются как SCSI-диски, т.е., устройства /dev/sdX, но работает с ними почему-то типично IDE-дисковая утилита hdparm :) . Внимание!!! SATA-винчестеры у нас тоже обозначаются как /dev/sdX! У меня SATA-винчестер, потому ему по праву принадлежит /dev/sda, а флешке - следующая буква b, т. е. /dev/sdb. Попытаемся познакомиться с ней поближе:

 root@H84_103:~# hdparm /dev/sdb
/dev/sdb:
#Защита от записи выключена
readonly = 0 (off)
readahead = 256 (on)
#Транслируемая геометрия соответсвует реальной: 1017856 секторов это ~512 МБ
geometry = 1014/17/59, sectors = 1017856, start = 0

Теперь сделаем ей «низкоуровневое форматирование», т. е. забъем всё пространства накопителями нулевыми байтами. Таким образом мы удалим софт-бэды, сотрем ошибочные таблицы FAT, загрузочный сектор, MBR. Внимание! Все оставшиеся данные на флешке будут безвозвратно утеряны!

 root@H84_103:~# dd if=/dev/zero of=/dev/sdb
#dd вводили без параметров, теперь он ругается на нехватку места на флешке. И правильно, генератор нулей то у нас безразмерный :)
dd: запись в `/dev/sdb': No space left on device
1017857+0 записей считано
1017856+0 записей написано
скопировано 521142272 байта (521 MB), 144,185 секунд, 3,6 MB/s

Флешка USB 2.0 на 512 МБ стиралась 2,5 минуты
Теперь "по-фирменному" создаём раздел.

 root@H84_103:~# fdisk /dev/sdb
#fdisk ругается, что не нашел ни DOS-овской таблицы разделов, ни метки диска в стиле BSD. Оно и понятно - вся флеш забита нулями.
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
#Умный fdisk сразу предлагает помощь. Давим m
Command (m for help):m
#Вывод списка команд:
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
#Нам нужна новый раздел. Жмем n, как написано:
Command (m for help): n
Command action
e extended
p primary partition (1-4)
#Естественно, первичный раздел. Жмем p
p
#И первый, естественно. Жмем 1
Partition number (1-4): 1
#Здесь соглашаемся со всем, что предлагает fdisk. Он умный, сам разберется :)
First cylinder (1-1014, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1014, default 1014):
Using default value 1014
#Смотрим, чего мы наваяли :) . Жмем p
Command (m for help):p
Disk /dev/sdb: 521 MB, 521142272 bytes
17 heads, 59 sectors/track, 1014 cylinders
Units = cylinders of 1003 * 512 = 513536 bytes
Device      Boot       Start       End      Blocks     Id       System
/dev/sdb1    1         1014     508491      +        83        Linux
#По умолчанию фдиск создал, естественно, линуксовый раздел (ну не виндовый же ему создавать). Надо поменять ID раздела. Жмем t.
Command (m for help): t
#Выбираем первый раздел для изменения ID
Selected partition 1
#предусмотрительный fdisk предлагает посмотреть, на что мы можем поменять тип раздела
Hex code (type L to list codes): l
0 Empty                    1e Hidden W95 FAT1               80 Old Minix                         be Solaris boot
1 FAT12                    24 NEC DOS                            81 Minix / old Lin                  bf Solaris
2 XENIX root             39 Plan 9                                82 Linux swap                      c1 DRDOS/sec (FAT-
3 XENIX usr              3c PartitionMagic                      83 Linux                              c4 DRDOS/sec (FAT-
4 FAT16 <32M           40 Venix 80286                       84 OS/2 hidden C:                c6 DRDOS/sec (FAT-
5 Extended                41 PPC PReP Boot                   85 Linux extended                c7 Syrinx
6 FAT16                    42 SFS                                   86 NTFS volume set              da Non-FS data
7 HPFS/NTFS             4d QNX4.x                              87 NTFS volume set              db CP/M / CTOS / .
8 AIX                        4e QNX4.x 2nd part                 88 Linux plaintext                 de Dell Utility
9 AIX bootable           4f QNX4.x 3rd part                  8e Linux LVM                       df BootIt
a OS/2 Boot Manag     50 OnTrack DM                      93 Amoeba                          e1 DOS access
b W95 FAT32              51 OnTrack DM6 Aux              94 Amoeba BBT                   e3 DOS R/O
c W95 FAT32 (LBA)     52 CP/M                                 9f BSD/OS                          e4 SpeedStor
e W95 FAT16 (LBA)      53 OnTrack DM6 Aux             a0 IBM Thinkpad hi               eb BeOS fs
f W95 Ext'd (LBA)        54 OnTrackDM6                     a5 FreeBSD                          ee EFI GPT
10 OPUS                     55 EZ-Drive                          a6 OpenBSD                         ef EFI (FAT-12/16/
11 Hidden FAT12         56 Golden Bow                      a7 NeXTSTEP                        f0 Linux/PA-RISC b
12 Compaq diagnost    5c Priam Edisk                      a8 Darwin UFS                       f1 SpeedStor
14 Hidden FAT16 <3    61 SpeedStor                        a9 NetBSD                            f4 SpeedStor
16 Hidden FAT16         63 GNU HURD or Sys             ab Darwin boot                       f2 DOS secondary
17 Hidden HPFS/NTF    64 Novell Netware                 b7 BSDI fs                             fd Linux raid auto
18 AST SmartSleep     65 Novell Netware                 b8 BSDI swap                        fe LANstep
1b Hidden W95 FAT3    70 DiskSecure Mult               bb Boot Wizard hid                 ff BBT
1c Hidden W95 FAT3    75 PC/IX
#Елки-палки, а мы думали, что кроме Винды и ФАТ32 на свете ничего и нет :) . Меняем ID партишна на ФАТ16 - топчем 6
Hex code (type L to list codes):6
Changed system type of partition 1 to 6 (FAT16)
#Еще раз посмотрим на дело рук своих
Command (m for help): p
Disk /dev/sdb: 521 MB, 521142272 bytes
17 heads, 59 sectors/track, 1014 cylinders
Units = cylinders of 1003 * 512 = 513536 bytes
Device      Boot      Start     End     Blocks    Id    System
/dev/sdb1    1        1014   508491    +         6     FAT16
#Всё ОК. Пишем изменения и выходим
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

И всё!? Ан нет. Это создан раздел для FAT16. А его надо отформатировать, а по науке говоря, создать на нем чистую файловую систему. В Линуксе есть простая и прямая как рельс утилитка для этого - mkdosfs. Просто пишем, на каком разделе мы хотим создать чистую FAT16

 root@H84_103:~# mkdosfs /dev/sdb1
mkdosfs 2.11 (12 Mar 2005)


Линкусоиды могут тут же примонтировать новообретенный девайс и что-нибудь записать на него. Пользователи дружественной и удовлетворяющей все запросы пользователей ОС грузятся в Windows и радуются, что стали "настоящими" линуксоидами :) .
Необходимое послесловие.

Автор не несет никакой ответственности за то, что счастливые обладатели SATA-дисков попутали буквы и постирали информацию со своих винчестеров (а такие будут, это я гарантирую :) ) . Если вы из статьи ничего не поняли, и проблеск мысли в мозгу не воссиял :) , то лучше статью сразу забыть, флешку выкинуть и идти в магазин за новой. Данная технология справедлива для флешек до 2 ГБ включительно.

Перепечатка или цитирование разрешены при условии сохранения ссылки с R.LAB.