LinuxForum.Fans
Тема

Определить тип файловой системы без монтирования

Автор: bobr 18 сообщений 3944 просмотров
#147329

Если в мобильник (Nokia N900) вставить ммс-флэшку, то запускается скрипт следующего содержания:
[console]mount -t vfat -o $3,noauto,nodev,noexec,nosuid,noatime,nodiratime,utf8,uid=29999,shortname=mixed,dmask=000,fmask=0133,rodir "$1" "$2" > /dev/null [/console]
То есть он предполагает FAT32 флэшку, разумеетсяесли с этими же параметрами попытаться примонтировать ext3, то ниче не выйдет.
Пока нашел такое решение:
[console]mount -t vfat -o $3,noauto,nodev,noexec,nosuid,noatime,nodiratime,utf8,uid=29999,shortname=mixed,dmask=000,fmask=0133,rodir "$1" "$2" > /dev/null || mount -t ext3 -o rw,noatime,nodiratime,noacl,data=writeback,commit=10 "$1" "$2" > /dev/null[/console]
Сначала пытаемся примонтировать как фат, если mount завершается с ненулевым кодом ошибки, то монтируем как ехт3.
Но это костыль.
В связи с этим, хотелось бы узнать как можно определить тип файловой системы до монтирования?
Редактировать /etc/fstab, сразу оговорюсь тут не варик. Он обновляется и переписывается при перезагрузке какими-то специфичными инитскриптами.

#147360

Мне кажется нужно комбинировать sed и fdisk -l

#147366
bobr написал:
В связи с этим, хотелось бы узнать как можно определить тип файловой системы до монтирования?

зачем это надо-то?!
вы меня расстраиваете :( :( :(
мне сажЪ не хватит :[
просто не пишите своё -t, и тогда mount будет сама определять
Если какие-то специфические опции надо (кстати, куда столько-то??!!!) - потом mount -o remount с этими опциями.

#147367
bobr написал:

1)rw,
2)noatime,
3)nodiratime,
4)noacl,
5)data=writeback,commit=10

1) дефолт
2,3) ненужно всегда. Иногда - опасно.
4,5) НЕХ

bobr написал:
$3,noauto,nodev,noexec,nosuid,noatime,nodiratime,utf8,uid=29999,shortname=mixed,dmask=000,fmask=0133,rodir

facepalm
ЗАЧЕМ????

ЗЫЖ noacl это тоже дефолт ваще-то

#147400
drBatty написал:
просто не пишите своё -t

Если б все так просто.
Ладно, бес с ним, с "-t". А вот если не написать dmask=000,fmask=0133, то в гуе телефона нельзя будет создать ни папку ни файл, так как монтируется от рута, а гуи работает от юзера.

drBatty написал:
2,3) ненужно всегда. Иногда - опасно.

Доктор, это же не сервер, это телефон! Тут несколько иные "опасно" и "безопасно" и уж совершенно другие "производительно " и "медленно". Он и так еле ворочается, а если еще diratime и atime да еще и commit каждые полсекунды... ну вы понимаете.
А насчет дефолтов, вы кстати тоже не совсем правы, тут своя нокиевская сборка mount (точнее говоря busybox), у нее свои дефолты.
Вы б лучше решение какое предложили, чем сажей разбрасываться.

#147402
drBatty написал:
Если какие-то специфические опции надо (кстати, куда столько-то??!!!) - потом mount -o remount с этими опциями.

Хотя, вот это возможно подойдет.
Только все равно, нужно будет определить тип файловой системы. Но тут можно grep /proc/self/mounts и далее sed или там еще что... придумать можно. Но только получается еще больший костыль.

#147403
bobr написал:
А вот если не написать dmask=000,fmask=0133, то в гуе телефона нельзя будет создать ни папку ни файл, так как монтируется от рута, а гуи работает от юзера.

надоело...

bobr написал:
Доктор, это же не сервер, это телефон! Тут несколько иные "опасно" и "безопасно" и уж совершенно другие "производительно " и "медленно". Он и так еле ворочается, а если еще diratime и atime да еще и commit каждые полсекунды... ну вы понимаете.

да-да... а я не про то, что взломают, я про то, что файлы теряются.

bobr написал:
Вы б лучше решение какое предложили, чем сажей разбрасываться.

прочитать man mount наконец :[

#147405
drBatty написал:
да-да... а я не про то, что взломают, я про то, что файлы теряются.

Ды я тоже не об этом. Просто файлы не спроста теряются. Для этого должно что-то произойти типа отключения электричества.
Но, когда в доме отключают электричество, мой телефон продолжает работать. Не, я серьезно, продолжает.
Если садится батарейка ниже определенного уровня, то телефон запускает /sbin/shutdown -h. Так что, тож не страшно.

drBatty написал:
прочитать man mount наконец mad

А вы и впрямь считаете, что я не читал man mount?

Ды и вообще вопрос был совершенно конкретный

bobr написал:
как можно определить тип файловой системы до монтирования?
#147406

ну можно прочитать командой dd первый сектор диска. и прочитать там магическую сигнатуру.
tune2fs -l

#147408
Vadimsky написал:
Мне кажется нужно комбинировать sed и fdisk -l

Что-то даже и не сразу обратил внимание на ваш пост.
Пожалуй, это то что надо.

#147410
bobr написал:
Vadimsky пишет:

Мне кажется нужно комбинировать sed и fdisk -l

Что-то даже и не сразу обратил внимание на ваш пост.
Пожалуй, это то что надо.

Блин, в телефоне не предусмотрен fdisk )-: Что впрочем логично.

#147412
drBatty написал:
ну можно прочитать командой dd первый сектор диска. и прочитать там магическую сигнатуру.

Надо попробовать.

#147480

root@ksu:~# dd if=/dev/sdb5 bs=1111 count=1 | hexdump
1+0 записей считано
1+0 записей написано
скопировано 1111 байт (1,1 kB), 5,2918e-05 c, 21,0 MB/c
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400 dd30 0001 721e 0007 5f4e 0000 0fcc 0005
0000410 61c1 0001 0000 0000 0002 0000 0002 0000
0000420 8000 0000 8000 0000 1fd0 0000 62ce 4d97
0000430 6150 4d97 0002 0022 ef53 0001 0001 0000
0000440 6150 4d97 4e00 00ed 0000 0000 0001 0000
0000450 0000 0000 000b 0000
0000457
#147484

[console]# dd if=/dev/sdb1 bs=2 skip=540 count=1 | hexdump | sed '/ ef53/q0;q1' && echo "EXT"[/console]

#147529
bobr написал:

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

В фряхе делаю так если забыл что за фс на диске, а смонтировать не могу, или не хочу, так что если телефон есть в /dev то так:
file - < /dev/фс

#147691
papin-aziat написал:
file - < /dev/фс

Пасиба. Седня попробую завернуть в скрипт.

#147725

[console] #!/bin/sh
if file - < $1 | grep ext3 > /dev/null; then
modprobe ext3
mount -t ext3 -o rw,noatime,nodiratime,noacl,data=writeback,commit=10 $1 $2 > /dev/null
exit 0
elif file - < $1 | grep ext2 > /dev/null; then
modprobe ext2
mount -t ext2 -o rw,noatime,nodiratime,noacl,data=writeback,commit=10 $1 $2 > /dev/null
exit 0
elif file - < $1 | grep FAT > /dev/null; then
mount -t vfat -o $3,noauto,nodev,noexec,nosuid,noatime,nodiratime,utf8,uid=29999,shortname=mixed,dmask=000,fmask=0133,rodir $1 $2 > /dev/null
exit 0
fi
[/console]
Вот конечный скрипт.
Можно ставить [решено]

#149639
bobr написал:
file - < $1

S="`file - < $1`"

...

if echo "$S" | grep -q "ext3"; then

быстрее... и Ъ

Войдите или зарегистрируйтесь, чтобы ответить.