[ALTSP] Local USB storage in ALTSP 4.0

Andrey Liakhovets liakh at dol.ru
Tue May 5 13:26:19 MSD 2009


ALTLinux Terminal 4.0, обновлённый до Branch4.0 от 2009-05-01,
chroot также обновлён до Branch4.0 от 2009-05-01, в chroot
установлено и на терминалах грузится ядро 2.6.22-led-tc-alt16.

На терминале у меня не работали USB-дисковод и флешка без разделов.

Оказалось, это из-за того, что в udev-rules-108-alt2.M40.1 в chroot
в конце /etc/udev/rules.d/60-persistent-storage.rules выполняется
KERNEL=="*[!0-9]", ATTR{removable}=="1", GOTO="persistent_storage_end"
и в результате не вызывается IMPORT{program}="vol_id --export $tempnode"
для removable устройств без разделов.
Поэтому в lbuscd-0.6-alt7.M40.1 в /etc/udev/rules.d/88-ltsp.rules
на терминале для таких устройств не выполняется add_fstab_entry
(так как не существует ID_FS_TYPE) и т.д.

Исключение в /etc/udev/rules.d/88-ltsp.rules и в add_fstab_entry
сделано для KERNEL=="fd[0-9]*" (при этом в /lib/udev/add_fstab_entry
принудительно устанавливается fstype="vfat").

Но USB-дисковод и USB-флешка -- это не fd*.

Чтобы таки заработало, дополнил 88-ltsp.rules вызовом add_fstab_entry
для USB-floppy и вызовом vol_id для USB-disk и немного изменил
add_fstab_entry, сделав такую же обработку USB-floppy, что и fd*:


$ cat /etc/udev/rules.d/88-ltsp.rules
# /etc/udev/rules.d/88-ltsp.rules
ACTION=="remove", SUBSYSTEM=="block", RUN+="remove_fstab_entry %k"
ACTION!="add", GOTO="end_of_ltsp_rules"

KERNEL=="fd[0-9]*", RUN+="add_fstab_entry %k auto", GOTO="end_of_ltsp_rules"
# IDE CDRoms
ENV{ID_CDROM}=="?*", RUN+="add_fstab_entry %k auto", GOTO="end_of_ltsp_rules"

SUBSYSTEM!="block", GOTO="end_of_ltsp_rules"

ENV{ID_FS_TYPE}=="?*", GOTO="try_ltsp_block_fs"

ENV{ID_BUS}=="usb", ENV{ID_TYPE}=="floppy", RUN+="add_fstab_entry %k auto", GOTO="end_of_ltsp_rules"
ENV{ID_BUS}=="usb", ENV{ID_TYPE}=="disk", KERNEL=="*[!0-9]", ATTR{removable}=="1", IMPORT{program}="vol_id --export $tempnode"

LABEL="try_ltsp_block_fs"

ENV{ID_FS_TYPE}=="?*", RUN+="add_fstab_entry %k $ENV{ID_FS_TYPE} %s{size}"

LABEL="end_of_ltsp_rules"


$ diff -Nau add_fstab_entry.{old,new}
--- add_fstab_entry.old 2009-05-05 12:37:19 +0400
+++ add_fstab_entry.new 2009-05-05 12:42:58 +0400
@@ -6,10 +6,10 @@

 devicename=$(basename $1)
 fstype=$2
+BLOCKS=${3:-0}
+
 if [ -z "$fstype" ]; then
     fstype="$ID_FS_TYPE"
-    # fstype unknown, do nothing
-    [ -n "$fstype" ] || exit 1
 fi
 [ "$fstype" != "swap" ] || exit 0

@@ -25,6 +25,14 @@
     if [ -z ${LABEL} ]; then
        LABEL=$(echo ${ID_BUS}${ID_TYPE}-$devicename |tr " " "_")
     fi
+    if [ -z "$fstype" -o "$fstype" = "auto" ]; then
+        if [ "${ID_TYPE}" = "floppy" ]; then
+            fstype="vfat"
+            BLOCKS=0
+        fi
+    fi
+    # fstype unknown, do nothing
+    [ -n "$fstype" ] || exit 1
 fi

 # make sure the root we mount to exists
@@ -35,7 +43,6 @@
 MOUNTPOINT=$ROOT/$LABEL
 [ -d $MOUNTPOINT ] || mkdir ${MOUNTPOINT}

-BLOCKS=${3:-0}
 SIZE=$((${BLOCKS}*512/1048576))
 DESCRIPTION="${ID_VENDOR}"
 ENC_CONF="/etc/udev/fs-encoding.conf"


Это изменение ничего не испортило для моих флешек с разделами и
для кардридера. Также работают все разделы на жёстком диске на
тестовом терминале (правда там было ещё одно изменение для
использования ntfs-3g, а не ntfs).
Для того, чтобы "почувствовало" новую дискету, надо выдернуть
и вставить весь дисковод.

Не уверен, что надо проверять ENV{ID_BUS}=="usb",
но у меня других removable нет.

Андрей Ляховец

PS.
Поставил ALTLinux Terminal 5.0 alpha, посмотреть, как там.
USB-storage не заработали совсем.
Но это, наверное, отдельная тема.


More information about the Ltsp-server mailing list