檔案系統管理(二)

掛載點與 /etc/fstab

/etc/fstab 檔案是系統開機時掛載檔案系統的重點設定檔,它包含了 6 個欄位:
#device          mount_point          FS_type          options          dump_freq          fsck_order
裝置                掛載點                   檔案系統         選項              傾印備份頻率       磁碟檢查順序
/dev/sda6        /mnt/data            ext3                defaults          0                         0

.在 device 裝置部份,也可用標籤方式設定,如 LABEL=MyLabel,其優點在於好記,也可避免裝置順序亂掉,如 sda 下次開機變成了 sdb,這種狀況在 SCSI 裝置中發生的機率比較高
.在 dump_freq 傾印備份頻率中,可用選項有 0=完全不備份、1=每天、2=每隔一天
.在 fsck_order 磁碟檢查順序中,可用選項有 0=忽略、1=最先、2~9=第二~第九序位

在修改完了 fstab 檔案後,可先用 mount -a 來立即掛載並檢查有沒有錯誤,以免重新開機後會開機失敗。

==============================

mount 和 umount

掛載檔案系統的指令是 mount:
#mount  [-t  fstype]  [-o  options]  device  mount_point

如果 mount 指令不帶任何參數或選項,它會列出 /etc/mtab 中目前系統掛載的內容:
# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/proc on /var/named/chroot/proc type none (rw,bind)
/var/run/dbus on /var/named/chroot/var/run/dbus type none (rw,bind)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sda6 on /mnt type ext3 (rw)

當執行 mount 沒有帶 -o options 的選項時,它會加入預設的選項:
rw:可讀可寫
suid:可使用 suid 及 sgid 功能
dev:可使用裝置檔案
exec:可使用執行檔
async:非同步寫入磁碟 (先把要寫入磁碟的資料存在記憶體,程式執行速度就會加快,資料在背景寫入磁碟,如果電力中斷就有可能造成資料損毀)

其他常用的 options 選項有:
acl:啟動存取控制清單 (ACL) 功能
uid=john,gid=john:此掛載的檔案系統中所有的檔案都屬 john.john 所有
loop:掛載迴路裝置 (loopback device),如光碟、ISO 檔

卸載檔案系統

卸載檔案系統的指令是 umount:
#umount  [options]  device|mount_point

# umount /dev/sda6
# df -h

檔案系統              容量  已用 可用 已用% 掛載點
/dev/sda1              97G   43G   45G  50% /
tmpfs                 887M     0  887M   0% /dev/shm

當要卸載檔案系統時,發生系統忙碌的情形,可能是有程序正在進行,或是有使用者正在該掛載目錄之中,我們可以用 fuser 命令來管理:
# df -h
檔案系統              容量  已用 可用 已用% 掛載點
/dev/sda1              97G   43G   45G  50% /
tmpfs                 887M     0  887M   0% /dev/shm
/dev/sda6             9.2G  150M  8.6G   2% /mnt

# cd /mnt 有使用者進入 /mnt 中
# umount /mnt
umount: /mnt: device is busy (無法卸載掛載點)
umount: /mnt: device is busy
# fuser -v /mnt (查詢一下有誰或什麼程序正在使用)
USER        PID ACCESS COMMAND
/mnt:                root       1464 ..c.. bash
(root 正用 bash 在使用這個目錄)
# fuser -km /mnt (不重要的話可以強制終止)
/mnt:                 1464c
# umount /mnt (然後就可以順利卸載掛載點)
# df -h
檔案系統              容量  已用 可用 已用% 掛載點
/dev/sda1              97G   43G   45G  50% /
tmpfs                 887M     0  887M   0% /dev/shm

重新掛載

當開機失敗,系統進入維護模式時,/ 是用唯讀 (ro) 方式掛載的,我們如果要修改任何設定檔,如 fstab 或 grub.conf,就必順將 / 重新掛載成可讀寫的模式,這時就要用 -o remount,rw 的選項來執行:
# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
.
.
/dev/sda6 on /mnt type ext3 (ro)
(本掛載點是以唯讀方式掛載)
# mount -o remount,rw /mnt (重新掛載成可讀寫)
# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
.
.
/dev/sda6 on /mnt type ext3
(rw) (已掛載成可讀寫)

其他 mount 範例

有其他經常可見到的 mount 使用方式,語法及說明如下:

#mount  -t  ext3  -o  noexec  /dev/hda7  /home
(將 /home 掛載成不得使用執行檔)

#mount  -t  iso9660  -o  loop  /iso/My_ISO_File.iso  /mnt/cdimage
(將 My_ISO_File.iso 的光碟影像檔掛載到 /mnt/cdimage 中,檔案格式是 iso9660,選項是 loop)

#mount  -t  vfat  -o  uid=515,gid=520  /dev/hdc2  /mnt/projX
(以 vfat (如隨身碟)的檔案格式,將 /dev/hdc2 掛載到 /mnt/projX 上,其上所有檔案的所有人是 uid=515,gid=520,不然檔案擁有者預設是 root)

#mount  -t  ext3  -o  noatime  /dev/hda2  /data
(以 noatime 不變更存取時間的選項掛載 /dev/hda2 到 /data 這個掛載點,noatim 可微幅提昇磁碟存取效率)

#mount  –bind  /Any_Directory  /Mount_Point
(將本機 Any_Directory 這個目錄,掛到本機 Mount_Point 上去)