LINUX.ORG.RU
Ответ на: комментарий от xapienz

Спасибо, это тоже первое, что пришло в голову.

Но в этом случае неоднозначно получается, когда мы пользователю скажем, допустим, что карточка Read-Only, а в реале мы не смогли на неё записать, потому что или карточка забита, или же ошибка в файловой системе. Интересно, но по dmesg вижу, что ядро однозначно определяет, какую карточку я вставил:

[13746.440785] mmc0: new SD card at address b1d8
[13746.441125] mmcblk0: mmc0:b1d8 SD02G 1.83 GiB (ro)
[13746.443314] mmcblk0: p1
[13769.882415] mmc0: card b1d8 removed


[13778.702079] mmc0: new SD card at address b1d8
[13778.702413] mmcblk0: mmc0:b1d8 SD02G 1.83 GiB
[13778.703952] mmcblk0: p1

В гугле по этой проблеме ничего толкового не нахожу...



velikS
() автор топика

Ничего записывать не нужно. Примонтируй ее. Если она защищена от записи, то примонтируется в режиме ro, если нет - примонтируется в режиме rw.

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

Неправда. У меня mount говорит что rw, при попытке записи - говорит что рид-онли.

ymuv ★★★★
()

Попробовать писать напрямую на устройство, а не на файловую систему на нём:

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

Если получится, то физически карта доступна на запись, если нет, то видимо заблокирована запись.

kostik87 ★★★★★
()

мб ты плохо искал в sysfs? какой флажок пропустил

anonymous
()
Ответ на: комментарий от panter_dsd

Затрётся не всё, а только первый блок в 512 байт, можно блок указать вообще в один байт (один символ), тогда даже ФС не повредится.

Какой вы ещё способ видите, кроме самого логичного, вынуть карту и посмотреть переключатели на ней или картридере.

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

Внимательно читаем то, что предложили вы или другой анонимус:

грепать dmesg накрайняк

И ТС:

В /sys/class/mmc_host/mmc0/mmc0:b1d8/block/mmcblk0/mmcblk0p1

/sys и dmesg разные вещи.

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

Ну ё-моё, ещё один, есть что сказать по теме, нет - тогда не флудим. Блок и в один байт можно взять, тогда фс не повредится.

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

>Блок и в один байт можно взять, тогда фс не повредится.

Можно еще в обойму один патрон вставить... Ты наркоман что-ли?

madcore ★★★★★
()
   SD Specifications
         Part 1
    Physical Layer
Simplified Specification

4.3.6 Write Protect Management Three write protect methods are supported in the SD Memory Card as follows: - Mechanical write protect switch (Host responsibility only) - Card internal write protect (Card's responsibility) - Password protection card lock operation.

Mechanical Write Protect Switch

A mechanical sliding tablet on the side of the card (refer to the Part 1 Mechanical Addenda) will be used by the user to indicate that a given card is write protected or not. [bla-bla-bla] The position of the write protect switch is unknown to the internal circuitry of the card.

Так что вывод mount/dmesg - не показатель. Точнее всего будет использовать touch/access(2).

ono
()

juri@debian:~$ dmesg |grep Write\ Protect\ is\ on

нее?

anonymous
()

И вот тут так бы пригодилось последнее поделие Леннарта ;)

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

Ну ё-моё, ещё один, есть что сказать по теме, нет - тогда не флудим. Блок и в один байт можно взять, тогда фс не повредится.

Нет, даже таким способом можно повредить данные.

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

Прочти любой блок и попробуй записать его обратно.

Туда же - это небезопасно на многозадачных системах.

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

Суперблок файловой системы, даже если она создана не на разделе, а с начала устройства начинается не с первых секторов (блоков), заголовок FAT, предваряющий начало файловой системы, у ТС скорее всего FAT на карте, предваряется несколькими пустыми блоками, так что если в первый блок 8 бит (1 байт) - 1 символу записать что-либо то файловая система не повредиться.

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

А если там не FAT? А если там зашифрованные данные?

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

Не знал про эту утилитку. Спасибо. Но независимо от состояния карточки, выдаёт «0». Т.е. не работает.

Посмотрю как-нить позже, работает ли (2) access.

Всем спасибо за идеи

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

>> Туда же - это небезопасно на многозадачных системах.

Возможно, глупость скажу, но разве нельзя на время проверки открыть файл устройства эксклюзивно?

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

>ИМХО это баг какой-то.

Уже сам так думаю, а уж то больно как-то странно все. Кубунта 11.04, Ядро 2.6.38-11-generic-pae.
Вот и появился повод обновить систему :)

velikS
() автор топика
Ответ на: комментарий от velikS

Linux eeepc 3.0.4-gentoo-r2-eeepc #1 Mon Oct 3 11:45:14 MSK 2011 i686 Intel(R) Celeron(R) M processor 900MHz GenuineIntel GNU/Linux

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

>Попробовать писать напрямую на устройство, а не на файловую систему на нём
И запори ФС, если карта в режиме rw ;>

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

Возможно, глупость скажу, но разве нельзя на время проверки открыть файл устройства эксклюзивно?

Нельзя, если он уже кем-то открыт.

В любом случае способ «прочитать и тут же попробовать записать» - это русская рулетка.

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

>заголовок FAT, предваряющий начало файловой системы, у ТС скорее всего FAT на карте, предваряется несколькими пустыми блоками

В FAT в первом секторе первые 3 байта зарезервированы под команду JMP, чтобы с ФС можно было загружаться (код начинает выполняться с начала сектора, сразу идёт JMP на код, который после информационных структур, начинающихся с 4-го байта). Если затереть первый байт, то загрузиться с этой ФС больше не получится, более того, при попытке загрузки выполнятся данные, что приведёт к случайным последствиям.

gentoo_root ★★★★★
()
Ответ на: комментарий от velikS
/*
* Set the read-only status based on the supported commands and the write protect switch.
*/
md->read_only = mmc_blk_readonly(card);

изучите drivers/mmc/card/block.c в сорцах ядра

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

>что карточка Read-Only, а в реале мы не смогли на неё записать, потому что или карточка забита, или же ошибка в файловой системе.

для этого существует errno

и echo $?

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

>>Но независимо от состояния карточки, выдаёт «0». Т.е. не работает.

ИМХО это баг какой-то.

существуют кардридеры, игнорирующие положение переключателя на карточке. так что может и не баг никакой. А фича.

На моем кардридере можно, вследствие этого, спокойно пользоваться карточками с выломанным/сломанным переключателем.

dikiy ★★☆☆☆
()

Примонтируй от рута и скастуй test.

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