Skip to Content

将分区挂载到指定位置的pmount补丁

labrador 的头像
这个补丁的主要作用是使pmount
  • 正确挂载有中文文件名的cd和ntfs/fat分区
  • 根据fstab中的设定,选取设备的挂载点

使用方法很简单。比如,在/etc/fstab中添加一行:
/dev/hda1    /root/C盘    auto    noauto,rw    0 0
之后使用打过补丁的pmount就可以将/dev/hda1挂载到/root/C盘,而不是默认的/mnt/hda1。如果要挂载到别的地方,后面"auto noauto,rw 0 0"几个参数不需要改动,只要改第二个参数就可以了。

如果想将U盘挂载到某一个指定的地方,方法稍微复杂一点。因为U盘可能因为插入的顺序不同使其设备名发生变化,所以我们需要先知道所要挂在U盘分区的UUID,而UUID是永远不变的,除非你重新格式化。此ID可以通过运行blkid获得。比如在终端下运行blkid后得到:
# blkid
/dev/loop1: UUID="52f8f4ce-245b-426c-972c-d0a580efcade" TYPE="ext2" 
/dev/sda1: UUID="F057-D3D4" TYPE="vfat" 
/dev/sdb1: SEC_TYPE="msdos" LABEL="STAPLES" UUID="D837-7888" TYPE="vfat" 
其中/dev/sda1是我经常使用的kingston的U盘,我想每次都将它挂载到/mnt/kingston,那么就在etc/fstab中加入一行:
UUID=F057-D3D4    /mnt/kingston    auto    noauto,rw    0 0
这样插入那个U盘以后,运行pmount就可以将它挂载到指定目录。

需要注意的是挂载目录名不能包含空格,另外fstab中的UUID字符串不需要加双引号。

以下是这个补丁的内容:
--- /initrd/pup_ro2/usr/sbin/pmount	2008-04-07 06:11:00.000000000 -0400
+++ pmount	2008-05-17 19:35:05.000000000 -0400
@@ -205,19 +205,39 @@
  DODEV="`echo -n "$EXIT" | cut -f 2 -d '_'`"
  DEVNAME="`echo -n "$DODEV" | cut -f 3 -d '/'`"
  DOFS="`echo -n "$EXIT" | cut -f 3 -d '_'`"
- mkdir -p /mnt/$DEVNAME
+
+ MNTPT="`cat /etc/fstab | awk -v "DEV=$DODEV" '$1==DEV {print $2; exit}'`"
+ if [ -z "$MNTPT" ]; then
+  UUID="`blkid | grep "^$DODEV:" | grep -o 'UUID=\"[^\"]*' | sed 's/\"//g'`"
+  MNTPT="`cat /etc/fstab | awk -v "DEV=$UUID" 'toupper($1)==toupper(DEV) {print $2; exit}'`"
+ fi
+ if [ -z "$MNTPT" ]; then
+  MNTPT=/mnt/$DEVNAME
+ else
+  MNTPT="`echo -n "$MNTPT" | sed 's/\\\\040/ /g'`"
+  # It seems that mount in PUP4 doesn't work if the mountpoint contains space character,
+  # so we fall back to old mountpoint in this case. If PUP4 fixes this problem in future,
+  # remove the following line, and this comment, of course.
+  echo -n "$MNTPT" | grep " " && MNTPT=/mnt/$DEVNAME  
+ fi
+
+ mkdir -p "$MNTPT"
  case $DOFS in
   ntfs)
    #'mount' is a script that takes care of mounting ntfs...
-   mount -t ntfs $DODEV /mnt/$DEVNAME
+   mount -t ntfs -o nls=utf8 $DODEV "$MNTPT"
    RETVAL1=$?
    ;;
   vfat)
-   mount -t vfat -o shortname=mixed $DODEV /mnt/$DEVNAME
+   mount -t vfat -o shortname=mixed,utf8 $DODEV "$MNTPT"
+   RETVAL1=$?
+   ;;
+  iso9660)
+   mount -t iso9660 -o utf8 $DODEV "$MNTPT"
    RETVAL1=$?
    ;;
   *)
-   mount -t $DOFS $DODEV /mnt/$DEVNAME
+   mount -t $DOFS $DODEV "$MNTPT"
    RETVAL1=$?
    ;;
  esac
@@ -230,7 +250,7 @@
   done
   usleep 100000
   #v3.95 -x option to rescan...
-  exec rox -x /mnt/$DEVNAME -d /mnt/$DEVNAME #want this window on top.
+  exec rox -x "$MNTPT" -d "$MNTPT" #want this window on top.
   #exit
  else
   xmessage -bg red -center -title "Pmount" "ERROR: unable to mount $DEVNAME"
#4142
这个补丁怎么下载阿?
#4150
labrador 的头像
这个补丁已经包含在中文包中了。
#11038
如果换一个u盘呢,还能自动挂到/mnt/kingston 吗?ID都不同啦。没什么太大用,只能识别固定的设备。

发表新评论

  • 你可以在文本中使用BBCode标记语言。 URL会自动被转为链接。

更多关於格式化选项的信息

CAPTCHA
请验证您是否是机器人。
Image CAPTCHA
Enter the characters shown in the image.