Linux 的磁碟掛載等特色,以及檔案系統 (filesystem) 的介紹
本文資料主要針對 Fedora Core 4 的系統進行說明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而來, 這個 Red Hat Linux 9 並不是當前大家聽到的 RHEL 喔!那是在 RHEL 出現之前的產品,基本上是在 2003 年以前的作品了!Fedora Core 4 則是在 2005 年 6 月份釋出,使用的核心是 2.6.11 版,當時是很紅的一個作品!只是生命週期太短,所以用這個 Fedora 系列來介紹 Server, 當時的決定確實有點莫名其妙了...
建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 Fedora Core 4 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
我們在前面的檔案權限介紹的章節當中,提到很多的權限與屬性的觀念,那麼接下來要瞭解的是, 這些屬性是記錄在硬碟的那個地方?這裡就要特別瞭解到 Linux 檔案系統( filesystem )是如何記錄檔案, 與檔案是如何被讀取的囉!而要瞭解整個檔案系統的觀念,就不能不知道硬碟的組成元件! 所以,在這個章節當中,我們由最基礎的硬碟組成元件介紹起,並介紹 inode 與連結檔等基本知識, 以及如何利用開機即可掛載的方式來使我們的各個 partition 可以在開機時就已經進行好掛載的動作喔!
[root@linux ~]# ls -la --time=atime PATH
那個 PATH 是您所想要查詢的檔案或目錄名稱。利用上面的 ls
相關參數,就可以取得您想要知道的檔案相關的三種時間囉~
至於一個 inode 的大小為 128 bytes 這麼大 (可以使用底下要介紹的
dumpe2fs 來查閱 inode 的大小喔!) !好了,那麼我的
Linux 系統到底是如何讀取一個檔案的內容呢?底下我們分別針對目錄與檔案來說明:1. 察看一下根目錄所記載的所有檔案關連性資料 [root@linux ~]# ls -lia / 2 drwxr-xr-x 24 root root 4096 Jul 16 23:45 . 2 drwxr-xr-x 24 root root 4096 Jul 16 23:45 .. 719489 drwxr-xr-x 83 root root 12288 Jul 21 04:02 etc 523265 drwxr-xr-x 24 root root 4096 Jun 25 20:16 var # 注意看一下,在上面的 . 與 .. 都是連結到 inode 號碼為 2 的那個 inode , # 也就是說, / 與其上層目錄 .. 都是指向同一個 inode number 啊!兩者是相同的。 # 而在根目錄所記載的檔案關連性 (在 block 內) 得到 /etc 的 inode number # 為 719489 那個 inode number 喔! 2. 察看一下 /etc/ 內的檔案關連性的資料 [root@linux ~]# ls -liad /etc/crontab /etc/. 719489 drwxr-xr-x 83 root root 12288 Jul 21 04:02 /etc/. 723496 -rw-r--r-- 1 root root 663 Jul 4 12:03 /etc/crontab # 瞧!此時就能夠將 /etc/crontab 找到關連性囉!所以您知道,目錄的最大功能就是在提供檔案的關連性,在關連性裡面, 當然最主要的就是『檔名與 inode 的對應資料』囉!另外,關於 EXT2 檔案系統,這裡有幾點小事情要提醒一下:
[root@linux ~]# dumpe2fs /dev/hda1 Filesystem volume name: / Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 1537088 Block count: 1536207 Free blocks: 735609 Free inodes: 1393089 First block: 0 Block size: 4096 Filesystem created: Sat Jun 25 16:21:13 2005 Last mount time: Sat Jul 16 23:45:04 2005 Last write time: Sat Jul 16 23:45:04 2005 Last checked: Sat Jun 25 16:21:13 2005 First inode: 11 Inode size: 128 Journal inode: 8 Group 0: (Blocks 0-32767) Primary superblock at 0, Group descriptors at 1-1 Reserved GDT blocks at 2-376 Block bitmap at 377 (+377), Inode bitmap at 378 (+378) Inode table at 379-1400 (+379) 0 free blocks, 32424 free inodes, 11 directories Free blocks: Free inodes: 281-32704 Group 1: (Blocks 32768-65535) Backup superblock at 32768, Group descriptors at 32769-32769 Reserved GDT blocks at 32770-33144 Block bitmap at 33145 (+377), Inode bitmap at 33146 (+378) Inode table at 33147-34168 (+379) 18 free blocks, 24394 free inodes, 349 directories Free blocks: 37882-37886, 38263-38275 Free inodes: 38084-38147, 39283-39343, 41135, 41141-65408 # 因為資料很多,所以鳥哥略去了一些資訊了~上面是比較精簡的顯示內容。 # 在 Group 0 之前的都是 Superblock 的內容,記錄了 inode/block 的總數, # 還有其他相關的訊息。至於由 Group 0 之後,則是說明各個 bitmap 及 inode table # 與 block area 等等。透過這些記錄,我們可以很輕易的就知道哪些 inode 沒有被使用,哪些 block 還可以記錄, 如此一來,在新增、建立檔案與目錄時,系統就會根據這些記錄來將資料分別寫入尚未被使用的 inode 與 block area 了! 不過,要注意的是,當我們新增一個檔案(目錄)時:
[root@linux ~]# ls -lid / /home 2 drwxr-xr-x 26 root root 4096 7月 21 09:08 / 2 drwxr-xr-x 42 root root 4096 7月 14 23:37 /home看到了吧?咦!怎麼 / 與 /home 的 inode number 都是 2 啊??這太不合理了~ 原因很簡單啊!因為 / 是 /dev/hda1 而 /home 是 /dev/hda2 ,這兩個 partition 都有 inode number 為 2 的號碼啊!所以啊,請注意, 掛載點一定是『目錄』而不是檔案喔! 也就是說,這個掛載點就是進入該 filesystem 的入口啦!
[root@linux ~]# ls -l /lib/modules/`uname -r`/kernel/fs
系統目前已啟用的檔案系統則有:
[root@linux ~]# cat /proc/filesystems
假設您的 / 使用的是 /dev/hda1 ,用 ext3 ,而 /home 使用 /dev/hda2 ,用 reiserfs ,
那麼您取用 /home/dmtsai/.bashrc 時,有特別指定要用的什麼檔案系統的模組來讀取嗎?!
應該是沒有吧!嘿嘿!這個就是我們 Linux kernel 的 Virtual Filesystem Switch (VFS)
的功能啦!透過這個 VFS 的功能來管理所有的 filesystem,
省去我們需要自行設定讀取檔案系統的定義啊~方便很多!
[root@linux ~]# df [-ahikHTm] [目錄或檔名] 參數: -a :列出所有的檔案系統,包括系統特有的 /proc 等檔案系統; -k :以 KBytes 的容量顯示各檔案系統; -m :以 MBytes 的容量顯示各檔案系統; -h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示; -H :以 M=1000K 取代 M=1024K 的進位方式; -T :連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出; -i :不用硬碟容量,而以 inode 的數量來顯示 範例: 範例一:將系統內所有的 partition 列出來! [root@linux ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda1 5952252 3012332 2632680 54% / /dev/shm 192836 0 192836 0% /dev/shm /dev/hda5 9492644 221604 8781060 3% /home # 特別注意,在 Linux (FC4) 底下,如果 df 沒有加任何參數, # 那麼預設會將系統內所有的 (不含特殊記憶體內的檔案系統與 swap) 都以 Kbytes # 的容量來列出來!至於那個 /dev/shm 是與記憶體有關的掛載,先不要理他! 範例二:將容量結果以易讀的容量格式顯示出來 [root@linux ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/hda1 5.7G 2.9G 2.6G 54% / /dev/shm 189M 0 189M 0% /dev/shm /dev/hda5 9.1G 217M 8.4G 3% /home # 不同於範例一,這裡會以 G/M 等容量格式顯示出來,比較容易看啦! 範例三:將系統內的所有特殊檔案格式及名稱都列出來 [root@linux ~]# df -aT Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/hda1 ext3 5952252 3012332 2632680 54% / /dev/proc proc 0 0 0 - /proc /dev/sys sysfs 0 0 0 - /sys /dev/devpts devpts 0 0 0 - /dev/pts /dev/shm tmpfs 192836 0 192836 0% /dev/shm /dev/hda5 ext3 9492644 221604 8781060 3% /home none binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc # 看到了吧!系統裡面其實還有很多的特殊檔案系統在跑得! # 不過,那些比較特殊的檔案系統幾乎都是在記憶體當中,例如 /proc 這個掛載點。 # 因此,這些特殊的檔案系統都不會佔據硬碟空間喔! ^_^ 範例四:將 /etc 底下的可用的磁碟容量以易讀的容量格式顯示 [root@linux ~]# df -h /etc Filesystem Size Used Avail Use% Mounted on /dev/hda1 5.7G 2.9G 2.6G 54% / # 這個範例比較有趣一點啦,在 df 後面加上目錄或者是檔案時, df # 會自動的分析該目錄或檔案所在的 partition ,並將該 partition 的容量顯示出來, # 所以,您就可以知道某個目錄底下還有多少容量可以使用了! ^_^ 範例五:將目前各個 partition 當中可用的 inode 數量列出 [root@linux ~]# df -ih Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hda1 1.5M 141K 1.4M 10% / /dev/shm 48K 1 48K 1% /dev/shm /dev/hda5 2.4M 67 2.4M 1% /home這是用來顯示目前磁碟的總容量與剩餘可用容量的指令!需要注意的是, 由於我們的檔案或者是外掛的磁碟都是加在『 / 』底下,所以當根目錄沒有空間的時候, 嘿嘿!你的 Linux 系統可能大概就要掛了吧~當然囉!你可以將你的資料放置在加掛的硬碟中, 那麼如何知道目前哪一個磁碟還有多少空間呢?!
[root@linux ~]# du [-ahskm] 檔案或目錄名稱 參數: -a :列出所有的檔案與目錄容量,因為預設僅統計目錄底下的檔案量而已。 -h :以人們較易讀的容量格式 (G/M) 顯示; -s :列出總量而已,而不列出每個各別的目錄佔用容量; -k :以 KBytes 列出容量顯示; -m :以 MBytes 列出容量顯示; 範例: 範例一:列出目前目錄下的所有檔案容量 [root@linux ~]# du [root@vbird ~]# du 16 ./.gnome2 16 ./.ssh .......中間省略........ 292 . # 直接輸入 du 沒有加任何參數時,則 du 會分析『目前所在目錄』 # 的檔案與目錄所佔用的硬碟空間。但是,實際顯示時,僅會顯示目錄容量, # 但我的 . 目錄有很多檔案沒有被列出來,所以,全部的目錄相加不會等於 . 的容量喔! 範例二:同範例一,但是將檔案的容量也列出來 [root@linux ~]# du -a 12 ./install.log.syslog 16 ./.gnome2 16 ./.ssh 76 ./install.log 16 ./.bash_history 4 ./.bashrc .......中間省略........ 292 . # 加上這個 -a 參數後,就會將目錄底下的檔案也一起列示出來, # 而不是僅列出檔案資訊而已!注意囉~ ^_^ 範例三:檢查根目錄底下每個目錄所佔用的容量 [root@linux ~]# du -sm /* 7 /bin 14 /boot .......中間省略........ 385 /proc .......中間省略........ 1 /tmp 2944 /usr 79 /var # 這是個很常被使用的功能囉~利用萬用字元 * 來代表每個目錄, # 所以,如果想要檢查某個目錄下,那個次目錄佔用最大的容量,就可以用這個方法找出來 # 值得注意的是,如果您剛剛安裝好 Linux 時,那麼整個系統容量最大的應該是 /usr # 那個目錄,而 /proc 雖然有列出容量,但是那個容量是在記憶體中,不佔硬碟空間。在 Windows 底下可以使用檔案總管來管理你的磁碟,在 Linux 底下也可以輕易的以 du 來知道目前磁碟的檔案容量耶!在預設的情況下,容量的輸出是以 KB 來設計的, 如果你想要知道目錄佔了多少 MB ,那麼就使用 -m 這個參數即可囉!而, 如果你只想要知道該目錄佔了多少容量的話,呵呵,使用 -s 就可以啦!另外, 如同上面的範例三,可以利用萬用字元 * 來加快你的搜尋喔!
[root@linux ~]# ln [-sf] 來源檔 目標檔 參數: -s :如果 ln 不加任何參數就進行連結,那就是hard link,至於 -s 就是symbolic link -f :如果 目標檔 存在時,就主動的將目標檔直接移除後再建立! 範例: 範例一:將 /etc/passwd 複製到 /tmp 底下,並且觀察 inode 與 block [root@linux ~]# cd /tmp [root@linux tmp]# cp -a /etc/passwd . [root@linux tmp]# du -sb ; df -i . 26948 . <== 先注意一下,這裡的容量是多少! Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hda1 1537088 144016 1393072 10% / # 利用 du 與 df 來檢查一下目前的參數~那個 du -sb # 是計算整個 /tmp 底下有多少 bytes 的容量啦! 範例二:將 /tmp/passwd 製作 hard link 成為 passwd-hd 檔案 [root@linux tmp]# ln passwd passwd-hd [root@linux tmp]# du -sb ; df -i . 26948 . Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hda1 1537088 144016 1393072 10% / # 仔細看,即使多了一個檔案在 /tmp 底下,整個 inode 與 block 的容量並沒有改變! [root@linux tmp]# ls -il passwd* 1242760 -rw-r--r-- 2 root root 1746 Jun 29 01:03 passwd 1242760 -rw-r--r-- 2 root root 1746 Jun 29 01:03 passwd-hd # 原來是指向同一個 inode 啊!這是個重點啊!另外,那個第二欄的連結數也會增加! 範例三:將 /tmp/passwd 建立一個符號連結 [root@linux tmp]# ln -s passwd passwd-so [root@linux tmp]# ls -li passwd* 1242760 -rw-r--r-- 2 root root 1746 Jun 29 01:03 passwd 1242760 -rw-r--r-- 2 root root 1746 Jun 29 01:03 passwd-hd 1242806 lrwxrwxrwx 1 root root 6 Jul 23 20:02 passwd-so -> passwd # 仔細看喔,這個 passwd-so 指向的 inode number 不同了!這是一個新的檔案~ # 這個檔案的內容是指向 passwd 的,你可以看到這個檔案的大小,是 6bytes , # 怎麼來的?因為 passwd 共有六個字元啊!哈哈!沒錯~這個連結檔的內容只是填寫 # 連結的目標檔案檔名而已!所以,你的連結檔檔名 (有時候含路徑) 有多長,檔案就多大! [root@linux tmp]# du -sb ; df -i . 26954 . Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hda1 1537088 144017 1393071 10% / # 呼呼!整個容量與 inode 使用數都改變囉~確實如此啊! 範例四:刪除原始檔案 passwd ,其他兩個檔案是否能夠開啟? [root@linux tmp]# rm passwd [root@linux tmp]# cat passwd-hd ......正常顯示完畢! [root@linux tmp]# cat passwd-so cat: passwd-so: No such file or directory # 怕了吧?!竟然無法正常的開啟這個檔案呢~
[root@linux ~]# ls -ld /tmp drwxrwxrwt 5 root root 4096 Oct 11 05:15 /tmp [root@linux ~]# mkdir /tmp/testing1 [root@linux ~]# ls -ld /tmp drwxrwxrwt 6 root root 4096 Oct 11 13:58 /tmp [root@linux ~]# ls -ld /tmp/testing1 drwxr-xr-x 2 root root 4096 Oct 11 13:58 /tmp/testing1瞧!原本的所謂上層目錄 /tmp 的 link 數量由 5 增加為 6 ,至於新目錄 /tmp/testing 則為 2 ,這樣可以理解目錄的 link 數量的意義了嗎?! ^_^
[root@linux ~]# fdisk [-l] 裝置名稱 參數: -l :輸出後面接的裝置所有的 partition 內容。若僅有 fdisk -l 時, 則系統將會把整個系統內能夠搜尋到的裝置的 partition 均列出來。 範例: 範例:查閱您的第一顆硬碟內的相關資訊 [root@linux ~]# fdisk /dev/hda <== 仔細看,不要加上數字喔! The number of cylinders for this disk is set to 2494. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) # 在你進入 fdisk 這支程式的工作畫面後,如果您的硬碟太大的話,就會出現如上訊息。 # 這個訊息僅是在告知你,因為某些舊版的軟體與作業系統並無法支援大於 1024 # 磁柱 (cylinter) 後的磁區使用,不過我們 Linux 是沒問題啦! Command (m for help): m <== 輸入 m 後,就會看到底下這些指令介紹 Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) # 這裡注意一下,使用 fdisk 這支程式是完全不需要背指令的,因為按下 m 之後, # 立刻就會有一堆指令說明跑出來了!在上面的指令當中,比較重要的有: # d 刪除一個磁碟分割槽、 n 新增一個磁碟分割槽、 p 將目前的磁碟分割槽列出來、 # q 不儲存離開!這個重要! w 寫入磁碟分割表後離開!這個危險! Command (m for help): p <== 這裡可以輸出目前磁碟的狀態 Disk /dev/hda: 20.5 GB, 20520493056 bytes <== 硬碟的資訊在這底下三行 255 heads, 63 sectors/track, 2494 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 83 Linux /dev/hda2 766 1147 3068415 83 Linux /dev/hda3 1148 1274 1020127+ 82 Linux swap /dev/hda4 1275 2494 9799650 5 Extended /dev/hda5 1275 2494 9799618+ 83 Linux # 由上面的資訊,您可以知道,我的硬碟是 20GB 的,而 Head/Sector/Cylinder # 的數量為 255/63/2494 ,另外,可以看到上頭的 Boot 嗎?那個地方代表有開機資訊的 # partition !另外,那個 start 與 end 則是指每一個 partition 的開始與結束的 # Cylinder 號碼!這樣可以瞭解我們前面一直強調的, partition 最小單位為 cylinder # 此外,上頭顯示的那個 Id 為主要檔案格式的代號,你可以按下 l ( L 的小寫 ) # 就可以知道我們 linux 的 fdisk 認識多少檔案系統囉! ^_^ # 至於 Blocks 則以 KBytes 來顯示該 partition 的容量的 Command (m for help): q # 想要不儲存離開嗎?按下 q 就對了!不要隨便按 w 啊! 範例:查閱目前系統內的所有 partition 有哪些? [root@linux ~]# fdisk -l Disk /dev/hda: 20.5 GB, 20520493056 bytes 255 heads, 63 sectors/track, 2494 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 765 6144831 83 Linux /dev/hda2 766 1147 3068415 83 Linux /dev/hda3 1148 1274 1020127+ 82 Linux swap /dev/hda4 1275 2494 9799650 5 Extended /dev/hda5 1275 2494 9799618+ 83 Linux Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux # 由於我的這個系統有兩顆硬碟,下達 fdisk -l 的話,所有的 partition 都看到了! # 另外,我可以確定我的 /dev/hdb 還有剩餘空間喔!因為由上面的資訊看來, # 我的 /dev/hdb 的磁柱應該可以到 3736 ,但是目前只用到 3633 ,所以, # 就肯定還有剩餘空間拉!等一下我們就用這個來測試囉!還記得我們剛剛在 認識 EXT2 檔案系統 裡面提到的 partition 部分內容嗎?其實 fdisk 最主要的工作就是在修改『 partition table 』 而已,並沒有實際的將硬碟切切割割的啦!他會定義出某一個 partition 是由 n1 磁柱到 n2 磁柱之間這樣的資訊!因此,如果硬碟分割錯誤時,只要在 format 之前將 partition tables 復原,那麼就可以將硬碟原來的資料救回來囉!所以,一個好的管理員,有時候也會將自己的 partition table 記錄下來,以備不時之需呀!
[root@linux ~]# fdisk /dev/hdb 1. 先看看整個結果是如何~ Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux 2. 按下 d 給他刪除吧! Command (m for help): d Selected partition 1 # 因為我們這個磁碟僅有 1 個 partition ,所以系統會自動幫我們~ Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System # 『看』不見了! partition 就這樣不見了! Command (m for help): q # 鳥哥這裡僅是做一個練習而已,所以,按下 q 就能夠離開囉~
[root@linux ~]# fdisk /dev/hdb Command (m for help): n Command action e extended p primary partition (1-4) p <==就是這裡!可以自行決定是 p 還是 e 喔! Partition number (1-4): 4 <==編號可以隨意! First cylinder (3634-3736, default 3634): <==這裡按下 Enter 就會使用預設值 Using default value 3634 Last cylinder or +size or +sizeM or +sizeK (3634-3736, default 3736): +100M # 這個地方有趣了!我們知道 partition 是由 n1 到 n2 的磁柱 (cylinder), # 但是我們對於磁柱的大小不容易掌握!這個時候可以填入 +100M 來讓系統自動幫我們找出 # 『最接近 100M 的那個 cylinder 號碼』!因為不可能剛好等於 100MBytes 啦! Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux /dev/hdb4 3634 3646 104422+ 83 Linux # 這個就是剛剛建立起來的 primary partition 囉!再繼續吧! Command (m for help): n Command action e extended p primary partition (1-4) e Partition number (1-4): 2 First cylinder (3647-3736, default 3647): <==這裡按下 Enter 就會使用預設值 Using default value 3647 Last cylinder or +size or +sizeM or +sizeK (3647-3736, default 3736): <==Enter Using default value 3736 Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux /dev/hdb2 3647 3736 722925 5 Extended /dev/hdb4 3634 3646 104422+ 83 Linux # 仔細看,我們說過, 1-4 號是磁碟保留的號碼,所以這個號碼可以隨意設定, # 不一定要由 1 開始呢!但是,等一下做的 logical 就一定是由 5 開始累加了! Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l <== 使用的是 logical 的 partition 喔! First cylinder (3647-3736, default 3647):<==Enter Using default value 3647 Last cylinder or +size or +sizeM or +sizeK (3647-3736, default 3736):<==Enter Using default value 3736 Command (m for help): p Disk /dev/hdb: 30.7 GB, 30735581184 bytes 255 heads, 63 sectors/track, 3736 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 * 1 3633 29182041 83 Linux /dev/hdb2 3647 3736 722925 5 Extended /dev/hdb4 3634 3646 104422+ 83 Linux /dev/hdb5 3647 3736 722893+ 83 Linux # 這可就 OK 囉~雖然新作出三個 partition ,不過僅有 /dev/hdb4 與 # /dev/hdb5 可以用啊! Command (m for help): w The kernel still uses the old table. The new table will be used at the next reboot. Syncing disks. # 有的時候,磁碟分割表變動之後,得要重新開機,有的則不需要~ # 上面的訊息告訴我們,需要重新開機呢!那就 reboot 吧!透過上面的例子,您可以清楚的看到,呵呵!第一個 logical 是在 5 號呦!OK!在 fdisk 完成之後,請記得使用 mke2fs 格式化囉!另外,請注意,如果過程中進行錯誤時, 那麼趕緊按下 q 離開即可!
[root@linux ~]# mke2fs [-bicLj] 裝置名稱 參數: -b :可以設定每個 block 的大小,目前支援 1024, 2048, 4096 bytes 三種; -i :多少容量給予一個 inode 呢? -c :檢查磁碟錯誤,僅下達一次 -c 時,會進行快速讀取測試; 如果下達兩次 -c -c 的話,會測試讀寫(read-write),會很慢~ -L :後面可以接表頭名稱 (Label),這個 label 是有用的喔!後面會講~ -j :本來 mke2fs 是 EXT2 ,加上 -j 後,會主動加入 journal 而成為 EXT3。 範例: 範例一:將剛剛建立的 /dev/hdb5 格式化成為 ext3 吧!且名稱為 logical [root@linux ~]# mke2fs -j -L "logical" /dev/hdb5 mke2fs 1.37 (21-Mar-2005) Filesystem label=logical OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 90432 inodes, 180723 blocks 9036 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=188743680 6 block groups 32768 blocks per group, 32768 fragments per group 15072 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840 Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 27 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # 這樣子就能夠將我們的系統給他建立起來囉~ 範例二:承上題,如果將 block 改為 2048 ,且 inode 改為 4096? [root@linux ~]# mke2fs -j -L "logical" -b 2048 -i 4096 /dev/hdb5 # 呈現出來的結果大致與範例一相似~不過就是 block 大小與 inode 數量會改變!這是用來將磁碟格式化成 Linux 系統檔的指令。基本上,只要寫入對的裝置檔案就可以了。 例如我們要格式化軟碟的話,或是新的硬碟 /dev/hda5 等等! 這個指令通常是在新的硬碟上面切割完之後,再加以格式化的!另外,如果要將舊的磁區格式化成 ext2 格式的話,就使用這個指令吧!進行當中顯示的訊息有點像上面的最後幾行, 系統會顯示目前的格式化的預設值!
[root@linux ~]# mkbootdisk --device /dev/fd0 `uname -r`
這是製作開機磁片的指令,其中,『 `uname -r` 』是目前 Linux 系統所使用的核心版本,
如果你有多個核心版本的話,你可以直接輸入核心版本。例如在鳥哥的系統中,
舊的核心還是有保留的,所以我都會至少有兩個核心,在我管理的某部主機中,核心為
2.6.11-1.1369_FC4 及 2.6.12-1.1398_FC4 ,那麼如果我要直接以 2.6.11-1.1369_FC4
來開機的話,就可以使用:
[root@linux ~]# fdformat /dev/fd0H1440
這是用來『低階格式化』軟碟的指令。( 注意:軟碟的裝置檔為 /dev/fd0 )!在上面的裝置檔案為
/dev/fd0H1440 , 其中加在 /fd0 之後的 H1440 為表示 1.44MB 的軟碟容量!
在低階格式化之後,還要將軟碟的檔案格式化為 Linux 的 ext2 之型態,則需要使用
mke2fs 指令!
[root@linux ~]# fsck [-AtCary] 裝置名稱 參數: -t :fsck 可以檢查好幾種不同的 filesystem ,而 fsck 只是一支綜合程式而已。 個別的 filesystem 的檢驗程式都在 /sbin 底下,您可以使用 ls -l /sbin/fsck* 去檢查看看,就知道有幾種 filesystem 囉。預設的 FC4 情況下,至少有: ext2, ext3, vfat, msdos 等等 filesystem。 -A :依據 /etc/fstab 的內容,將所有的裝置都掃瞄一次 (通常開機過程中就會執行此一指令) -a :自動修復檢查到的有問題的磁區,所以你不用一直按 y 囉! -r :一定要讓使用者決定是否需要修復,這與上一個 -a 剛好相反! -y :與 -a 類似,但是某些 filesystem 僅支援 -y 這個參數,所以您也可以利用 -y 啦! -C :可以在檢驗的過程當中,使用一個長條圖來顯示目前的進度! -f :強制檢查!一般來說,如果 fsck 沒有發現任何 unclean 的旗標,不會主動進入 細部檢查的,如果您想要強制 fsck 進入細部檢查,就得加上 -f 旗標囉! 範例: 範例一:將前面我們建立的 /dev/hdb5 這個裝置給他檢驗一下! [root@linux ~]# fsck -C -t ext3 /dev/hdb5 fsck 1.37 (21-Mar-2005) e2fsck 1.37 (21-Mar-2005) logical: clean, 11/181056 files, 21706/361446 blocks # 如果一切沒有問題,就會出現上述的訊息~這是用來檢查與修正硬碟錯誤的指令。注意:通常只有身為 root 且你的系統有問題的時候才使用這個指令,否則在正常狀況下使用此一指令, 可能會造成對檔案的危害!通常使用這個指令的場合都是在系統出現極大的問題,導致你在 Linux 開機的時候得進入單人單機模式下進行維護的行為時,才必須使用此一指令! 另外,如果你懷疑剛剛格式化成功的硬碟有問題的時後,也可以使用 fsck 來檢查一下硬碟呦!其實就有點像是 Windows 的 scandisk 啦!此外,由於 fsck 在掃瞄硬碟的時候,可能會造成部分 filesystem 的損壞,所以『執行 fsck 時, 被檢查的 partition 務必不可掛載到系統上!亦即是需要在卸載的狀態喔!』
[root@linux ~]# badblocks -[svw] 裝置名稱 參數: -s :在螢幕上列出進度 -v :可以在螢幕上看到進度 -w :使用寫入的方式來測試,建議不要使用此一參數,尤其是待檢查的裝置已有檔案時! 範例: [root@linux ~]# badblocks -sv /dev/hdb5 Checking blocks 0 to 722893 Checking for bad blocks (read-only test): done 893 Pass completed, 0 bad blocks found.這是用來檢查硬碟或軟碟磁區有沒有壞軌的指令!跟 Windows 的 scandisk 相同功能啦!不過由於 fsck 的功能比較強,所以目前大多已經不使用這個指令了!
[root@linux ~]# mount -a [root@linux ~]# mount [-tonL] 裝置名稱代號 掛載點 參數: -a :依照 /etc/fstab 的內容將所有相關的磁碟都掛上來! -n :一般來說,當我們掛載檔案系統到 Linux 上頭時, Linux 會主動的將 目前的 partition 與 filesystem 還有對應的掛載點,都記錄到 /etc/mtab 那個檔案中。不過,有些時刻 (例如不正常關機導致一些問題,而進入單人模式) 系統無法寫入 /etc/mtab 時,就可以加上 -n 這個參數來略過寫入 mtab 的動作。 -L :系統除了利用裝置名稱代號 (例如 /dev/hda1) 之外,還可以利用 partition 的表頭名稱 ( Label ) 來進行掛載喔!所以,最好為您的 partition 取一個 在您系統當中獨一無二的名稱吧! -t :您的 Linux 支援的檔案格式,就寫在這裡吧!舉例來說,我們在上面建立 /dev/hdb5 是 ext3 檔案系統,那麼要掛載時,就得要加上 -t ext3 來告知系統,用 ext3 的檔案格式來掛載該 partition 呢! 至於系統支援的 filesystem 類型在 /lib/modules/`uname -r`/kernel/fs 當中。 常見的有: ext2, ext3, reiserfs, 等 Linux 慣用 filesystem vfat, msdos 等 Windows 常見 filesystem iso9660 為光碟片的格式 nfs, smbfs 等為網路相關檔案系統。這部分未來我們會在網路方面提及! 若 mount 後面沒有加 -t 檔案系統格式時,則 Linux 在預設的情況下, 會主動以 /etc/filesystems 這個檔案內規範的檔案系統格式 來嘗試主動的掛載喔! -o :後面可以接一些掛載時,額外加上的參數喔!比方說帳號、密碼、讀寫權限等: ro, rw: 此 partition 為唯讀(ro) 或可讀寫(rw) async, sync: 此 partition 為同步寫入 (sync) 或非同步 (async),這個與我們 之前提到的檔案系統運作方式有關,預設是 async auto, noauto: 允許此 partition 被以 mount -a 自動掛載(auto) dev, nodev: 是否允許此 partition 上,可建立裝置檔案? dev 為可允許 suid, nosuid: 是否允許此 partition 含有 suid/sgid 的檔案格式? exec, noexec: 是否允許此 partition 上擁有可執行 binary 檔案? user, nouser: 是否允許此 partition 讓 user 執行 mount ?一般來說, mount 僅有 root 可以進行,但下達 user 參數,則可讓 一般 user 也能夠對此 partition 進行 mount 。 defaults: 預設值為:rw, suid, dev, exec, auto, nouser, and async remount: 重新掛載,這在系統出錯,或重新更新參數時,很有用! 範例: 範例一:將剛剛建立的 /dev/hdb5 掛載到 /mnt/hdb5 上面! [root@linux ~]# mkdir /mnt/hdb5 [root@linux ~]# mount -t ext3 /dev/hdb5 /mnt/hdb5 [root@linux ~]# df Filesystem 1K-blocks Used Available Use% Mounted on ....中間省略..... /dev/hdb5 700144 20664 643336 4% /mnt/hdb5 範例二:掛載光碟! [root@linux ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom [root@linux ~]# mount /dev/cdrom # 上面的參數當中提到,如果沒有加上 -t 這個參數時,系統會主動的以 # /etc/filesystems 裡面規範的內容給他測試一下是否掛載~另外, # 因為我們的 /etc/fstab 裡面會規範 /dev/cdrom 應該掛載到那個掛載點, # 因此,直接下達 mount /dev/cdrom 也是可以的喔!(當然要看/etc/fstab設定啦!) 範例三:掛載 Window fat 軟碟! [root@linux ~]# mount -t vfat /dev/fd0 /mnt/floppy 範例四:將 / 重新掛載,並加入參數為 rw ! [root@linux ~]# mount -o remount,rw / 範例五:將 Label 名為 logical 的 partition 掛載到 /mnt/hdb5 中 [root@linux ~]# mount -t ext3 -L logical /mnt/hdb5 範例六:將系統所有的以掛載的 partition 資料列出來 [root@linux ~]# mount /dev/hda1 on / type ext3 (rw) /dev/proc on /proc type proc (rw) /dev/shm on /dev/shm type tmpfs (rw) /dev/hda5 on /home type ext3 (rw) /dev/hdb5 on /mnt/hdb5 type ext3 (rw) # 嗯!不加任何參數,則 mount 會將目前系統的所有 partition # 與相關對應的 filesystem 及 mount point 都列出來!在預設的情況下, mount 這個指令只有 root 才能執行! 如果您想要將整個系統裡面記錄的 filesystem 與 mount point 對應的資料 (記錄在 /etc/fstab 檔中!), 全部都掛載上來,那麼請執行:
範例一:將 /home 這個目錄暫時掛載到 /tmp/home 底下: [root@linux ~]# mkdir /tmp/home [root@linux ~]# mount --bind /home /tmp/home [root@linux ~]# ls -lid /home/ /tmp/home 159841 drwxr-xr-x 6 root root 4096 May 30 20:07 /home/ 159841 drwxr-xr-x 6 root root 4096 May 30 20:07 /tmp/home 範例二:將 /tmp/home 卸載: [root@linux ~]# umount /tmp/home看起來,其實兩者連結到同一個 inode 嘛!! ^_^ 沒錯啦!透過這個 mount --bind 的功能, 您可以將某個目錄掛載到其他目錄去喔!而並不是整塊 filesystem 的啦!
[root@linux ~]# umount 裝置代號或掛載點 [root@linux ~]# umount /dev/hdb5 [root@linux ~]# umount /mnt/hdb5就是直接將 mount 上來的檔案系統給他卸載即是!卸載之後,可以使用 df 看看是否還存在呢?! 此外,也可以利用 -f 參數將想要卸載的 partition 強制卸載!此外, 卸載的方式,可以下達裝置 (如 /dev/hdb5) 或掛載點 (如 /mnt/hdb5),均可接受啦!
[root@linux ~]# mknod 裝置名稱 [bcp] [Major] [Minor] 參數: 裝置種類: b :設定裝置名稱成為一個周邊儲存設備檔案,例如硬碟等; c :設定裝置名稱成為一個周邊輸入設備檔案,例如滑鼠/鍵盤等; p :設定裝置名稱成為一個 FIFO 檔案; Major :主要裝置代碼; Minor :次要裝置代碼; 範例: 範例一:建立 /dev/hda10 這個磁碟儲存裝置 [root@linux ~]# mknod /dev/hda10 b 3 10 # 上面那個 3 與 10 是有意義的,不要隨意設定啊!還記得我們說過,在 Linux 底下所有的裝置都以檔案來代表吧!? 但是那個檔案如何代表該裝置呢?很簡單!就是透過檔案的 major 與 minor 數值來替代的~所以,那個 major 與 minor 數值是有特殊意義的, 不是隨意設定的喔!舉例來說,如果以硬碟裝置來說明,那麼 /dev/hda 到 /dev/hdd 的 major 與 minor 代碼是:
硬碟代號 | Major | Minor |
/dev/hda | 3 | 0~63 |
/dev/hdb | 3 | 64~127 |
/dev/hdc | 22 | 0~63 |
/dev/hdd | 22 | 64~127 |
[root@linux ~]# e2label 裝置名稱 新的Label名稱 [root@linux ~]# e2label /dev/hdb5 hdb5 [root@linux ~]# dumpe2fs -h /dev/hdb5 Filesystem volume name: hdb5 .....其他省略.....這個東西也挺有趣的,主要的功能是用來修改『磁碟的表頭資料』,也就是 label 啦。 那是甚麼東西呢?如果你使用過 Windows 的檔案總管的話,那麼應該會曉得, 每個磁碟機代號後面都有個名稱吧,呵呵!那個就是 label 囉。這個東西除了有趣之外, 也會被使用到一些設定檔案當中,舉例來說,當我們在掛載磁碟的時候,除了利用磁碟的代號之外 (/dev/hdxx) 也可以直接利用磁碟的 label 來作為掛載的磁碟掛載點喔!基本上, 就是那個 /etc/fstab 檔案的設定囉!
[root@linux ~]# tune2fs [-jlL] 裝置代號 參數: -j :將 ext2 的 filesystem 轉換為 ext3 的檔案系統; -l :類似 dumpe2fs -h 的功能~將 superblock 內的資料讀出來~ -L :類似 e2label 的功能,可以修改 filesystem 的 Label 喔! 範例: [root@linux ~]# tune2fs -l /dev/hdb5這個指令的功能其實很廣泛啦~上面鳥哥僅列出很簡單的一些參數而已, 更多的用法請自行參考 man tune2fs 。比較有趣的是,如果您的某個 partition 原本是 ext2 的檔案系統,如果想要將他更新成為 ext3 檔案系統的話, 利用 tune2fs 就可以很簡單的轉換過來囉~
[root@linux ~]# hdparm [-icdmXTt] 裝置名稱 參數: -i :系統在開機的過程當中,會利用本身核心的驅動程式(模組)來測試硬碟, 利用 -i 參數,可將這些測試值取出來,這些值不一定是正確的, 不過,卻可以提供我們一個參考值的依據! -c :設定 32-bit (32位元)存取模式。這個 32 位元存取模式指的是在硬碟在與 PCI 介面之間傳輸的模式,而硬碟本身是依舊以 16 位元模式在跑得! 預設的情況下,這個設定值都會被打開,建議直接使用 c1 即可! -d :設定是否啟用 dma 模式, -d1 為啟動, -d0 為取消; -m :設定同步讀取多個 sector 的模式。一般來說,設定此模式,可降低系統因為 讀取磁碟而損耗的效能~不過, WD 的硬碟則不怎麼建議設定此值~ 一般來說,設定為 16/32 是最佳化,不過,WD 硬碟建議值則是 4/8 。 這個值的最大值,可以利用 hdparm -i /dev/hda 輸出的 MaxMultSect 來設定喔!一般如果不曉得,設定 16 是合理的! -X :設定 UtraDMA 的模式,一般來說, UDMA 的模式值加 64 即為設定值。 並且,硬碟與主機板晶片必須要同步,所以,取最小的那個。一般來說: 33 MHz DMA mode 0~2 (X64~X66) 66 MHz DMA mode 3~4 (X67~X68) 100MHz DMA mode 5 (X69) 如果您的硬碟上面顯示的是 UATA 100 以上的,那麼設定 X69 也不錯! -T :測試暫存區 cache 的存取效能 -t :測試硬碟的實際存取效能 (較正確!) 範例: 範例一:取得我硬碟的最大同步存取 sector 值與目前的 UDMA 模式 [root@linux ~]# hdparm -i /dev/hda Model=ST320430A, FwRev=3.07, SerialNo=7BX02236 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0 BuffType=unknown, BuffSize=512kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=40079088 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 *udma4 AdvancedPM=no WriteCache=enabled Drive conforms to: device does not report version: 1 2 3 4 # 在輸出的資料中,有幾個比較重要的,除了 MaxMultSec 這個數值外, # 那個 UDMA modes: 會顯示目前的 UDMA 模式 (有 * 號的那個為目前的值)。 範例二:取得我主機板上面關於 IDE 的速度限制 [root@linux ~]# lspci -v 00:07.1 IDE interface: VIA Technologies, Inc. VT82C586/B/686A/B PIPC Bus Master IDE (rev 10) (prog-if 8a [Master SecP PriP]) Subsystem: VIA Technologies, Inc. VT8235 Bus Master ATA133/100/66/33 IDE Flags: bus master, medium devsel, latency 32 I/O ports at d000 [size=16] Capabilities: [c0] Power Management version 2 # 我可以透過 lspci 來直接取得 PCI 介面上的各個裝置設備。 # 其中,可以找到 IDE 介面,並從中找到關於這個介面可接受的速度呢! 範例三:啟動我的 UDMA 在 mode 4 喔~ [root@linux ~]# hdparm -d1 -c1 -X68 /dev/hda # 由範例一與範例二,鳥哥的主機板上面大概僅能支持到 UDMA 66 吧~ # 那就是 mode4 囉~所以, X = 64+4 = 68 ,因此,設定就是 -X68 囉~ 範例四:測試這顆硬碟的讀取效能 [root@linux ~]# hdparm -Tt /dev/hda /dev/hda: Timing cached reads: 544 MB in 2.01 seconds = 270.28 MB/sec Timing buffered disk reads: 80 MB in 3.01 seconds = 26.56 MB/sec # 我的機子沒有很好啦~這樣的速度.....差強人意~我們都知道目前的 IDE 硬碟主要的傳輸模式為 ATA 模式,最近 (2002年)已經出到了 ATA 133 了!不過,傳統上, ATA 66 就已經很厲害了!新的 IDE 硬碟也沒有辦法完全利用 ATA 100 呢!但是,你知道嗎?有沒有開啟 ATA 這個傳輸通道的 DMA 模式, 對於硬碟的存取效率差很大呦!
[root@linux ~]# mount -t ext2 /dev/fd0 /media/floppy [root@linux ~]# mount -t vfat /dev/fd0 /media/floppy [root@linux ~]# umount /media/floppy所以囉!即使是 Windows 格式的檔案,在 Linux 底下仍然是可以讀取的到的呦!另外, 要注意的是,即使你使用軟碟完畢之後,一定要將 /media/floppy 卸載之後才可以取出軟碟片喔!不然系統會一直告訴你發生錯誤囉!而在卸載 /media/floppy 的時候,你一定不能在該目錄底下,否則會發生錯誤訊息喔! 而如果載入的格式不符合,系統也不會將該軟碟掛上來的呦!好了,那麼怎麼製作 ext2 的軟碟呢?簡單的很,就使用 mke2fs /dev/fd0 就行啦!
[root@linux ~]# mkdir /mnt/win98 [root@linux ~]# mount -t vfat /dev/hda1 /mnt/win98 [root@linux ~]# mount -t vfat -o iocharset=cp950 /dev/hda1 /mnt/win98如此一來就將 Windows 的系統掛到 Linux 裡面囉!簡單吧!請注意, 上面那個第三行所使用的參數可以讓您的 Windows 98 的磁區當中的檔案顯示出正確的中文呦! 因為加入了中文編碼啊! ^_^
[root@linux ~]# mkdir /mnt/usb [root@linux ~]# mount -t vfat /dev/sda1 /mnt/usb上頭是假設您的 USB 隨身碟使用的是 FAT 的 Windows 檔案格式而設定的。 如果您的隨身碟是 NTFS 的 Windows 2000 檔案格式,那就比較麻煩, 因為 FC4 預設情況下,並不支援這個檔案系統的~ 如果您執意要掛載 NTFS 的檔案格式,那麼..... 請參考底下這個計畫的網站囉~
[root@linux ~]# cat /etc/fstab # Device Mount point filesystem parameters dump fsck LABEL=/ / ext3 defaults 1 1 /dev/hda5 /home ext3 defaults 1 2 /dev/hda3 swap swap defaults 0 0 /dev/hdc /media/cdrom auto pamconsole,exec,noauto,managed 0 0 /dev/devpts /dev/pts devpts gid=5,mode=620 0 0 /dev/shm /dev/shm tmpfs defaults 0 0 /dev/proc /proc proc defaults 0 0 /dev/sys /sys sysfs defaults 0 0其實這個 /etc/fstab 就是將我們使用 mount 來掛載一個裝置到系統的某個掛載點, 所需要下達的指令內容,將這些內容通通寫到 /etc/fstab 裡面去,而讓系統一開機就主動掛載囉~ 那麼 mount 下達指令時,需要哪些參數?不就是『裝置代號、掛載點、檔案系統類別、參數』等等, 而我們的 /etc/fstab 則加入了兩項額外的功能,分別是備份指令 dump 的執行與否, 與是否開機進行 fsck 掃瞄磁碟呢~
參數 | 內容意義 |
async/sync 非同步/同步 |
是否允許磁碟與記憶體中的資料以同步寫入的動作?使用 async 這個非同步寫入的方式會比較快速一些。 |
auto/noauto 自動/非自動 |
在開機的時候是否自動掛載該磁區?既然設定在這個區域內了, 當然希望開機的時候自動掛載囉! |
rw/ro 可讀寫/唯讀 |
讓該磁區以可讀寫或者是唯讀的型態掛載上來,如果是 vfat 之類的非 Linux 傳統磁區,您不想讓 Linux 變更的話,那麼使用 ro 也不錯!能夠提供有效的保護呢! |
exec/noexec 可執行/不可執行 |
限制在此檔案系統內是否可以進行『執行』的工作?如果是純粹用來儲存資料的, 那麼可以設定為 noexec 會比較安全,相對的,會比較麻煩! |
user/nouser 允許/不允許使用者掛載 |
是否允許使用者使用 mount 指令來掛載呢?一般而言,我們當然不希望一般身份的 user 能使用 mount 囉,因為太不安全了,因此這裡應該要設定為 nouser 囉! |
suid/nosuid 具有/不具有 suid 權限 |
該檔案系統是否允許 SUID 的存在?一般而言,如果不是 Linux 系統的磁區,而是一般資料的 partition ,那麼設定為 nosuid 確實比較安全一些!畢竟有 SUID 是蠻可怕的一件事。 |
usrquota | 注意名稱是『 usrquota 』不要拼錯了!這個是在啟動 filesystem 支援磁碟配額模式,更多資料我們在第四篇再談。 |
grpquota | 注意名稱是『grpquota』,啟動 filesystem 對群組磁碟配額模式的支援。 |
defaults | 同時具有 rw, suid, dev, exec, auto, nouser, async 等參數。 基本上,預設情況使用 defaults 設定即可! |
/dev/hdb5 /mnt/hdb5 ext3 defaults 2 2
很簡單吧!所以啦,以後您自己建立的磁碟檔案系統想在開機的時候掛載好時,就在 /etc/fstab 加入吧!
此外,這個 /etc/fstab 還有什麼特殊功能呢?還記得使用 mount -a
時,我們提到的該參數參考檔案吧?!沒錯啊!就是這個 /etc/fstab 啊!而且,一般來說,
當我們編輯 /etc/fstab 後,為了避免可能的錯誤,通常就會以
mount -a 這個指令來測試看看呢!這是很重要的一個測試動作喔!
[root@linux ~]# mount -n -o remount,rw /
加上 -n 則不更新 /etc/mtab ,加上 -o 則提供額外的參數設定。
利用這一動作,嘿嘿!您的 / 就可以讀寫,那麼自然就能夠更新檔案內容囉~
[root@linux ~]# dd if=/dev/zero of=/tmp/loopdev bs=1024k count=2048 2048+0 records in 2048+0 records out # 這個指令在下一小節也會談到,那個 if 是 input file, # of 是 output file ,至於 bs 是每個 block 大小, # count 則是總共幾個 bs 的意思。不過,測試時,注意 /tmp # 那個 partition 的大小啊!格式化
[root@linux ~]# mke2fs -j /tmp/loopdev mke2fs 1.35 (28-Feb-2004) loopdev is not a block special device. Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 262144 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user ....以下省略.....掛載
[root@linux ~]# mount -t ext3 -o loop /tmp/loopdev /media/cdrom/ [root@linux ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /tmp/loopdev 2064208 35880 1923472 2% /media/cdrom多了個獨立的裝置給您使用喔!其實就是那個 2GB 的檔案內容啦! 這東西看起來似乎沒有什麼用途的樣子,不過,如果您未來想要玩 Linux 上面的『虛擬主機』的話, 也就是以一部 Linux 主機再切割成為數個獨立的主機系統時,類似 VMware 這類的軟體, 在 Linux 上使用 xen 這個軟體,他就可以配合這種 loop device 的檔案類型來進行根目錄的掛載, 真的非常有用的喔! ^_^
例題一:如果您的系統是以鳥哥建議的方式來安裝的,那麼系統應該有一塊剩餘的空間。
請將該剩餘的空間格式化成為一個 swap device ,並且掛載到系統上! |
[root@linux ~]# dd if=/dev/zero of=/tmp/swap bs=4k count=16382 16382+0 records in 16382+0 records out # dd 這個指令是用來轉換檔案並且 copy 用的; # if 指的是要被轉換的輸入檔案格式 /dev/zero 可以由 man zero 來查看內容; # of 指的是輸出的檔案,我們將之輸出到 /tmp/swap 這個檔案; # bs 指的是一個磁區佔用幾個 kb ; # count 指的是要使用多少個 bs ,所以最後的容量為 bs*count = 4k * 16382 ~ 64MB如上所述,我們將建立一個檔名為 /tmp/swap 的檔案,且其內容共有 64MB 左右大小的檔案;
[root@linux ~]# mkswap /tmp/swap Setting up swapspace version 1, size = 67096576 bytes # 請注意,這個指令在下達的時候請『特別小心』,因為下錯字元控制, # 將可能使您的 filesystem 掛掉!
[root@linux ~]# free total used free shared buffers cached Mem: 62524 60200 2324 0 716 19492 -/+ buffers/cache: 39992 22532 Swap: 127004 2620 124384 [root@linux ~]# swapon /tmp/swap # 不要懷疑!這樣就已經將虛擬記憶體增加 64 MB 囉!如果您需要每次都啟動該檔案, 那麼將 swapon /tmp/swap 寫入 /etc/rc.d/rc.local 當中即可! [root@linux ~]# free total used free shared buffers cached Mem: 62524 60240 2284 0 724 19492 -/+ buffers/cache: 40024 22500 Swap: 192524 2620 189904
[root@linux ~]# swapoff /tmp/swap