mount(手工掛載/自動掛載)問題

1.vfat文件編碼方式
fat32文件名分爲兩種,短文件名和長文件名
兩種文件名在磁盤上的存儲方式是不同的,長文件名在目錄項中特殊的標記
短文件名也就是8.3格式,對於包含中文的任何文件來說都不可能是短文件名
mount掛載時默認將其變成小寫,你可以加-o shortname=winnt來使其和
win2k/xp一致
長文件名都是unicode的,以utf16格式存儲

2.codepage與iocharset
對於掛載fat32磁盤來說,codepage不需要設置,因爲它只對短文件名編碼方式起作用
系統默認cp437就足夠了
unix世界裏很多程序都不處理utf16,iocharset將16位unicode字符轉成其他字符集,
系統默認爲iso8859-1,一般把它設置成linux系統使用的字符集,如cp936(GBK),utf8
(注:不過linux系統推薦不要使用iocharset選項,推薦直接使用-o utf8 或者utf8=true
具體可參見linux-2.6.19/Documentation/filesystems/vfat.txt原文)

3.一般手工掛載/卸載步驟
(假定爲root或sudo進行操作的用戶,關於其他用戶的掛載見後面)

*找到需要掛載的設備名,通過查看所有塊設備:
cat /proc/partitions 或 fdisk -l
如果還是不清楚,可以對比查看已掛載設備:
mount 或 mount -l (-l選項會多輸出卷標)
或cat /proc/mounts
cat /etc/mtab (加-n選項mount的設備不顯示)

*找到設備後,選擇一個空目錄作爲掛載點
(當然你也可以把一個非空目錄作爲掛載點,但那樣很容易將目錄中的文件內容搞混)
如掛載u盤/dev/sda1到/mnt下,系統字符設定爲utf8
mount -t vfat /dev/hda /mnt -o utf8
就足夠了
不加-t vfat在很多情況下也是可以的,但手冊上建議最好指定,因爲不加-t的話,mount
會先去讀根據/etc/filesystems,/proc/filesystems中的文件系統類型進行猜測,只是
一種啓發式的猜測(與幻數magic有關),可能會出現問題
如果需要其它選項,見mount(8)

*卸載設備
確保當前目錄不在掛載目錄中,並關閉所有使用掛載目錄中文件的程序
umount <掛載點>或<設備名>
如果輸出還是device busy,可以使用
fuser <掛載點>
查看哪個進程號正在使用該設備,結合ps aux應該能解決問題
(注:-f雖然是強制卸載的含義,但只是針對nfs設計的)

4.固定設備最好在/etc/fstab中設定
<設備名> <掛載點> <類別> <選項> <是否dump> <是否fsck檢查>
對於最後一項,如果/根分區要檢查設爲1,ext2/3最好設成1
其它文件系統要檢查的話需設成2,對於fat32,ntfs文件系統個人覺得沒有必要

例如:
# <file system> <dir> <type> <options> <dump> <pass>
none /dev/pts devpts defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda7 swap swap defaults 0 0
/dev/hda8 / ext3 defaults 0 1

/dev/hda1 /media/winc vfat ro,uid=1000,utf8 0 0
/dev/hda5 /media/wind vfat rw,uid=1000,utf8 0 0
/dev/hda6 /media/wine vfat rw,uid=1000,utf8 0 0
/dev/sda1 /media/sda1 vfat rw,user,utf8,noauto 0 0
系統在init加載完驅動模塊後,會用一個類似mount -a的命令對/etc/fstab中的設備進行加載,
因此,有些人覺得沒有必要每次都掛載那些fat32盤,只要在/etc/fstab選項中加上noautoid
就可以了,cdrom(/dev/hdc或/dev/cdrom)也可以加上noauto放在這裏
登錄進去之後如果想要掛載,mount 設備名或掛載點 就好了
注:user選項的意思可以讓任何人都mount該設備,不過如果其他人或系統已經將其mount上了,
其餘非root用戶就不能umount; 要想讓任何人都可以umount該設備,將user選項改成users
而設置uid=1000(非root uid)後,即使是系統mount上的,文件系統所有者仍然是該uid指定的用戶,也
就對文件有了讀寫權限

5.自動掛載設置

*hal和dbus服務
自動掛載需要啓動hal服務,所以把它加到/etc/rc.conf的DEAMONS列表中是個不錯的主意
hal服務啓動時會先檢查dbus是否已經運行,如果未運行會先運行dbus,
所以你在DEAMONS列表中沒有dbus也是可以的
*自動掛載權限問題
系統默認對於普通用戶是沒有自動掛載權限的,不過你可以在
/etc/dbus-1/system.d/hal.conf找到解決方案
在文件的結尾處可以看到
<!-- You can change this to a more suitable user, or make per-group -->
<policy user="nobody">
所以將其改成你的非root用戶名就行了(這樣設置後你也獲得的電源管理和卷管理的權限)
當然,因爲上面定義了storage組有自動掛載的權限,所以你可以把自己加入到storage組中
(注:加入到一個組中最簡單的方法是編輯/etc/group,在storage組後添上你的用戶名就可以了,
當然用groupmems -a username -g groupname也是一個不錯的選擇)

*gnome和xfce中的自動掛載
hal探測到新硬件後,通過dbus通知gnome-volume-manager然後到gnome-mount
(其中gnome-volume-manage沒有也是可以的)
gnome-mount會先到/etc/fstab中查找是有該設備,如果有則按/etc/fstab中的選項自動掛載
如果沒有,則會按gnome-mount的掛載選項進行掛載
配置gnome-mount最簡單的方法是使用gconf-editor,在
systerm-->storage-->default_options-->vfat:mount_options
中設定,一般你只需要加上utf8就可以了
(注:在gnome中桌面中,掛載後圖標下面的盤符應該和該磁盤的卷標一致。如果磁盤沒有卷標,或者卷標中含有中文字符,則顯示該磁盤
的容量.對於fat32盤設置卷標最簡單的方法是到windows底下右鍵電擊該磁盤,在屬性->常規中對卷標進行設置; 在linux中ext2/3可以
用e2label進行設置)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章