HPC.ru lite - Все форумы
Форум: КПК и смартфоны на Linux: Zaurus, планшеты Nokia, прочее
Тема: проблемма с CФ картами
Страницы: 1 2 3 4 [5] 6
[Ответить]
SergL [26.01.2004 13:44] :
Я тут поэкспериментировал, пожертвовав одной sd картой - записал на нее с помощью dd первый попавшийся бинарник, а потом попытался ее оживить. Вот что получилось в стиле "сделай то, а потом это":
1. (Необязательно, но желательно, на всякий случай)
dd if=/dev/zero of=/dev/mmcda count=1 bs=512
2.
fdisk /dev/mmcda
(в случае, если появится какое-либо сообщение об ошибке, вынуть карту, через несколько секунд снова вставить и повторить вызов fdisk)
n<enter> - add new partition
p<enter> - (primary partition)
1<enter> - partition number=1
<enter> - first cylinder
<enter> - last cylinder
(В результате будет создан primary раздел, занимающий всю карту, с system id = linux (0x83).
Если будет использоваться vfat и планируется использовать карту и на заурусе, и на десктопе под виндами, надо сделать следующее
t<enter> - change partition's system id
1<enter> - partition number
b<enter> - Win95 FAT32 (или 6<enter> - FAT16)
w<enter> - write table to disk and exit
3.
mkfs.xxx /dev/mmcda1
PS. Совершенно не понимаю, почему fdisk не проверяет имя устройства, данное в качестве аргумента. Какой смысл писать таблицу разделов в раздел (в случае fdisk /dev/mmcda1)? Только если попытаться угробить файловую систему в разделе.
sil [26.01.2004 13:51] :
короче попробую с этого боку подойти к вопросу.
Что такое монтированая карта что такое немонтированная?
1. к чему приводит команда umount /dev/hda1 без каких нибудь ключей? к размонтированию карты или нет?
2. к чему приводит команда mount /dev/hda1 к монтированию карты или нет?
3. как командой fdisk можно привести к рабочему состоянию карту yfghxm убитую карту?
с какими ключами правильно? Например очереджность "o", "n" (вот тут то же не ясно что нужно делать..., ну допустим создадим толтько primary в первой таблице), "w" - верна?
Короче - какое нужно разделение на таблицы?
ВадимП [26.01.2004 14:11] :
На всякий случай немножко азов для тех, кто никогда раньше не работал с Unix:
Концепция монтирования в Unix очень проста: в MS-DOS было какое-то количество устройств. Каждое устройство обозначалось буквой. Эта схема использовалась и до MS-DOS во многих операционных системах (только имена устройств там состояли больше, чем из одной буквы).
Когда подключается новое устройство, оно становится доступно по имени устройства.
В Unix используется другая схема - единая древовидная структура. Каждое устройство (или раздел, который тоже можно рассматривать как устройство) содержит в себе собственную древовидную структуру каталогов. Для начала берется один из этих разделов и объявляется корневым. Корень этого раздела становится корнем файловой системы. Затем в этом разделе создаются директории, которые будут являться точками монтирования других файловых систем.
При монтировании древовидная файловая система какого-то устройства "прививается" к корневой в точке монтирования. Точки монтирования могут находиться в любой файловой системе, то есть можно "прививать" файловые системы к уже "привитому" стволу (/proc/usb на /proc).
Если в директории, которая стала точкой монтирования были какие-то файлы то они становятся недоступны. На их месте видны файлы из корня привитой файловой системы. Поэтому в тачестве точек монтировния как правило используют пустые директории.
ВадимП [26.01.2004 14:26] :
Теперь отвечаю на Ваши вопросы: Монтированная карта - это карта (точнее раздел, обычно он на карте один) файловая система которой "привита" к основному дереву.
"демонтированая" карта - это карта, файловая система которой удалена из дерева директорий. Соответственно ни один файл на ней через файловую систему недоступен. Но сами блоки физически могут быть доступны, например, для программы dd.
cf-карте соответствует устройство /dev/hda
sd-карте - /dev/mmcda
hda - "h"ard "d"isk "a" (т.е. 1-ый) - это стандартное в linux обозначение для master устройства на primary ide-интерфейсе.
mmcda - mmc disk "a"
/dev/hda1 - обозначение для 1-го раздела на устройстве /dev/hda.
Когда Вы даете команду "mount /dev/hda1" программа mount открывает и просматривает файл конфигурации /etc/fbtab и ищет в нем строчку содержащую /dev/hda1. когда она ее находит, она подставляет из этой строчки пропущеные параметры и любая из команд "mount /dev/hda1" или "mount /mnt/cf" преобразуется в полную форму: mount -t auto /dev/hda1 /mnt/cf".
Т.е. "монтировать устройство /dev/hda1 на директорию /mnt/cf автоматически определяя тип файловой системы на этом устройстве".
Вы обращали внимание, что если заглянуть в немонтированную директорию /mnt/cf то можно увидеть там "Not Available"? Это не какое-то специальное сообщение которое zaurus выдает мистическим образом определяя, что Вы заглядываете в директорию на которую ничего не монтировано. Все гораздо проще - в директории /mnt/cf действительно существует файл с именем "Not Available". Который, как объяснялось выше, становится недоступен если на эту директорию что-то монтировано.
ВадимП [26.01.2004 14:43] :
Итак, mount /dev/hda1 монтирует первый раздел cf карты на /mnt/cf, umount /dev/hda1 (или umount /mnt/cf, что то же самое) демонтирует эту карту и файлы на ней становятся недоступны.
Обычно операции записи/чтения файловой системы кэшируются. То есть, при записи информация сперва сбрасывается в дисковые буфера в оперативной памяти и только потом потихоньку переносится на диск (диск, дискета, флеш - один хрен). Прочитанная с диска информация не только поступает затребовавшему ее приложению, но и сохраняется в кэше. Размеров буферов и кэша можно просмотреть как по команде "free", так и воспользовавшись утилитой "информация о системе".
Когда Вы даете команду umount она сначала выполняет "sync" - сброс всех буферов.
Поэтому запись на флеш или дискету может завершиться вроде бы за считаные секунды, а демонтирование (сразу после записи, пока информация еще в буферах) этих носителей занять очень долгое время.
ВадимП [26.01.2004 14:51] :
@SergL
То, что fdisk не проверяет имя устройства - это вполне естественно и соответствует идеологии Unix: "скажи, что тебе нужно и я без лишних слов это исполню. Я верю, что ты знаешь, что делаешь".
К тому же, проверить не так-то просто: наименование устройст не только различается во всех версиях Unix, даже сам Linux имеет 3 несовместимые схемы наименования (традиционные созданные mknod файлы и псевдофайловые devfs и udev)
Я бы все-таки (на всякий случай) добавил бы в dd параметр bs=512. Мало ли что...
Да и изменение типа раздела необходимым не является: это чисто справочная информация, mount ее игнорирует.
@sil
fdisk не позволяет восстановить разрушенную файловую систему. Для этого используется fsck (для fat на cf: fsck.vfat /dev/hda1).
fdisk используется для того, чтобы восстановить таблицу разделов в MBR.
SergL любезно изложил всю последовательность действий, необходимую для того, чтобы пересоздать один раздел размером во всю карту.
Для cf просто вызов будет fdisk /dev/hda, а не fdisk /dev/mmcda.
sil [26.01.2004 15:49] :
а fdisk?
SergL [26.01.2004 15:59] :
ВадимП писал(а):
@SergL
То, что fdisk не проверяет имя устройства - это вполне естественно и соответствует идеологии Unix: "скажи, что тебе нужно и я без лишних слов это исполню. Я верю, что ты знаешь, что делаешь".
Этот принцип мне нравится
Только неопытный пользователь по незнанию может таких дров наломать...
ВадимП писал(а):
К тому же, проверить не так-то просто: наименование устройст не только различается во всех версиях Unix, даже сам Linux имеет 3 несовместимые схемы наименования (традиционные созданные mknod файлы и псевдофайловые devfs и udev)
Согласен, все так. Но вот во FreeBSD не стали делать полностью универсальный механизм проверки, а зашили наиболее употребляемые типы дисков в исходник. Полумера, но иногда может уберечь от неприятностей.
ВадимП писал(а):
Да и изменение типа раздела необходимым не является: это чисто справочная информация, mount ее игнорирует.
Это для windows, не для линукса. Windows не опознает карты с system-id=linux. По крайней мере Win98, на которой пробовал.
ВадимП [26.01.2004 16:08] :
SergL писал(а):
Это для windows, не для линукса. Windows не опознает карты с system-id=linux. По крайней мере Win98, на которой пробовал.
Да? Интересно... Но у меня windows нет, проверить не на чем.
sil [26.01.2004 16:36] :
ВадимП писал(а):
@SergL
SergL любезно изложил всю последовательность действий, необходимую для того, чтобы пересоздать один раздел размером во всю карту.
Для cf просто вызов будет fdisk /dev/hda, а не fdisk /dev/mmcda.
а где он её изложил?
команда fdisk /dev/hda требует ввода ключей.
[Ответить]
[< Назад] [Вперед >]