《鳥哥的linux私房菜 基礎篇》第八章讀書筆記(下)

第八章 linux磁盤與文件系統管理

(下)講述了文件系統的簡單操作(df,du,ln等)和磁盤的分區,格式化,檢驗和掛載(fdisk,mkfs,mke2fs,fsck,badblocks,mount,umount,parted等)。

df [-ahikHTm] [目錄或文件名]  ---  列出文件系統的整體磁盤使用量
-a:列出所有的文件系統,包括系統特有的/proc等文件系統
-k:以KBytes的容量顯示各文件系統
-m:以MBytes的容量顯示各文件系統
-h:以人們較易閱讀的GBytes,MBytes,KBytes等格式自行顯示
-i:不用硬盤容量,而以inode的數量來顯示

du [-ahskm] 檔案或目錄名稱   ---  評估文件系統的磁盤使用量(常用在推估目錄所佔容量)
-a:列出所有的檔案與目錄容量
-s:列出總量而已,而不列出每隔個別的目錄佔用容量。
-k, -m 和df相同
直接輸入du,它會分析目前所在目錄,僅顯示目錄容量

du -sm /* 檢查根目錄下每個目錄所佔有的容量
通配符*代表每個目錄

df主要讀取的數據幾乎都是針對一整個文件系統,它的讀取範圍主要是在superblock的信息
du會直接到文件系統內去搜尋所有的檔案數據,因此比df慢

實體連接與符號鏈接
linux下有兩種連接檔,一種是類似windows的快捷方式功能的檔案,可以快速鏈接到目標檔案(或目錄);另一種則是透過文件系統的inode連結來產生新檔名,而不是產生新檔案,稱爲實體連接(hard link)。多個檔名對應同一個inode號碼

建立實體鏈接指令 ln 鏈接的檔名 新建的檔名 

在ls出來的結果中的屬性權限後面、文件擁有者前的那個數字表示文件硬鏈接數或目錄的子目錄數

硬鏈接一般不改變系統的inode和block的使用數量。除非當目錄的block剛好用完一個,需要新加一個的時候
有兩個限制:不能跨filesystem;不能link目錄
如果鏈接目錄,鏈接的數據需要連同被連接目錄底下的所有數據都要鏈接。造成環境相當複雜,hard link暫不支持

Symbolic Link(符號鏈接,即快捷方式)
只是利用檔案來作爲指向的動作。兩個檔案指向不同的inode號碼,連接檔的內容就是目標檔案的文件名。但是當修改這個連接檔時,也是在修改原始檔。

ln [-sf] 來源文件(被連接的文件)  目標文件(新建的文件)
-s, symbolic link,沒有-s就是hard link
-f,如果目標文件存在,則主動的將目標文件直接移除後建立

當建立一個新目錄/tmp/testing時,則有/tmp/testing, . , .. 三個存在,它的link數爲2,且上層目錄link數要增加1(..的作用)

磁盤的分割、格式化、檢驗與掛載
fdisk [-l] 裝置名稱 : 磁盤分區(裝置名稱可用df命令顯示)
-l : 輸出後面接的裝置所有的partition內容,若僅有fdisk -l時,則系統將會把整個系統內能夠搜到的裝置的partition均列出來
注意在裝置名的時候,不要加數字,這樣會出現fdisk的工作畫面,m for help,即按下m就可以知道fdisk中的命令了,按照命令來操作即可
使用裝置文件名不要加上數字,因爲partition是針對整個硬盤裝置,而不是某個partition。

在利用fdisk命令劃分完分區後,按下w鍵會提示無法保存,需重啓才能重新讀取,這是因爲內核仍然在使用當前舊的分區,那麼如何在不重啓機器的情況下使系統能夠識別這些分區呢,可以使用partprobe這個小命令。partprobe是一個可以修改kernel中分佈表的工具,使kernel重新讀取分區表。它包含在parted的rpm軟件包中,利用rpm -q parted來判斷是否安裝了parted包。這個命令執行完之後不會輸出任何信息而直接返回,可以使用mke2fs命令在新的分區上創建文件系統。

mkfs [-t 文件系統格式] 裝置文件名 :磁盤格式化
-t : 可以接文件系統格式,例如ext3, ext2, vfat等(必須系統支持的,利用之前所說的命令ls -l /lib/modules/$(uname -r)/kernel/fs
mkfs[tab][tab]按兩下tab鍵,可以看到mkfs支持的文件格式。

mke2fs命令詳細的設定文件系統的標頭、block大小及inode數量等信息。
mke2fs [-b block大小] [-i inode大小] [-L 標頭] [-cj] 裝置文件名
-b  :可以設定每個 block 的大小,目前支持 1024, 2048, 4096 bytes 三種;
-i  :多少容量給予一個 inode 呢?
-c  :檢查磁盤錯誤,僅下達一次 -c 時,會進行快速讀取測試;
      如果下達兩次 -c -c 癿話,會測試讀寫(read-write),會很慢~
-L  :後面可以接標頭名稱 (Label),這個 label 是有用的喔!
-j  :本來 mke2fs 是 EXT2 ,加上 -j 後,會主動加入 journal 而成爲 EXT3。

磁盤檢驗
fsck [-t 文件系統] [-ACay] 裝置文件名   :檢查文件系統是否出錯
-t:指定文件系統,linux自己可以通過superblock來分辨,所以已經不需要了
-A:依據/etc/fstab的內容,將需要的裝置掃描一次(通常開機過程中就會執行此一命令)
-a:自動修復檢查到的有問題的扇區,不用一直按y
-y:與-a類似,但是某些filesystem僅支持-y參數
-C:檢驗過程中,使用直方圖來顯示進度
ext2/ext3的額外選項功能(e2fsck指令提供)
-f:強制檢查!一般來說,如果fsck沒有發現任何unclean的旗標,不會主動進入細部檢查
-D:針對文件系統下的目錄進行優化配置
通常使用這個指令的場合時在系統出現極大的問題,導致你的linux開機的時候得進入單人單機模式下進行維護的行爲時,才必須使用這一指令
fsck在掃描硬盤的時候,可能會造成部分filesystem的損壞,所以執行fsck的時候,被檢查的partition務必不可掛載到系統上!即需要在卸除的狀態

【lost+found】目錄時在當你使用fsck檢查文件系統後,若出現問題時,有問題的數據會被放置到這個目錄中。理論上他不會有任何數據,如果系統自動產生數據在裏面,那就得注意文件系統了

badblocks -[svw] 裝置名稱  : 磁盤檢驗,檢查硬盤或軟盤扇區有沒有壞軌
-s:在屏幕上列出進度
-v:可以再屏幕上看到進度
-w:使用寫入的方式來測試,建議不要使用此參數,尤其是待檢查的裝置已有檔案時

文件系統在掛載前,需要注意的:
  • 單一文件系統不應該被重複掛載在不同的掛載點(目錄)中
  • 單一目錄不應該重複掛載多個文件系統
  • 要作爲掛載點的目錄,理論上應該都是空目錄纔是

掛載命令 mount  (簡單解釋)
-a 依照配置文件/etc/fstab的數據將所有未掛載的磁盤都掛載上來
單獨mount命令顯示目前掛載的信息
-t 文件系統:掛載什麼類型的文件系統

/etc/filesystems:系統指定的測試掛載文件系統類型
/proc/filesystems:linux系統已經加載的文件系統類型
/lib/modules/$(uname -r)/kernel/fs/:linux支持的文件系統驅動程序都在此目錄下

將根目錄重新掛載,並加入參數rw與auto
mount -o remount,rw,auto /

mount還可以將某個目錄掛載到另外一個目錄去。在某些不支持符號鏈接的程序運作中,可以利用此方法。
mount --bind /home /mnt/home,將/home掛載到/mnt/home上去,但是這兩個目錄的inode號最後是相同的

umount [-fn] 裝置文件名或掛載點:將裝置檔案卸除
-f:強制卸除。可用在類似網絡文件系統NFS無法讀取到的情況下
-n:不更新/etc/mtab情況下卸除
在umount的時候,會出現device is busy而無法卸載,這是因爲你當前處在掛載點裏,只要退出即可再成功卸載

改變label的名稱
e2label 裝置名稱 新的label名稱

tune2fs [-jlL] 裝置代號
-l:類似dumpe2fs -h 的功能,將superblock內的數據讀出來
-j: 將ext2的filesystem轉換爲ext3
-L:類似e2label的功能,可以修改filesystem的label

hdparm [-icdmXTt] 裝置名稱  :通常用來測試硬盤的效能 (具體參數的作用就不寫了)
hdparm -Tt /dev/hdc 測試這個硬盤的讀取效能

利用修改/etc/fstab文件來設置開機掛載的注意事項:
  • 根目錄 / 是必須掛載的,而且一定要先於其他mount point被掛載進來
  • 其他mount point必須爲已建立的目錄
  • 所有mount point在同一時間之內,之內掛載一次
  • 所有partition在同一時間之內,之內掛載一次
  • 如若進行卸除,必須先將工作沒了移到mount point及其子目錄之外
/etc/fstab文件中六個字段的意義:
  1. 磁盤裝置文件名或該裝置的label
  2. 掛載點 mount point
  3. 磁盤分區槽的文件系統
  4. 文件系統參數 (同步/異步,自動/非自動,可擦寫/只讀。。。)
  5. 能否被dump備份指令作用 (可以用fstab指定哪個文件系統必須要進行dump備份,0代表不做dump備份,1代表每天都要做,2代表其他不定日期的dump動作,通常爲0或1)
  6. 是否以fsck檢驗扇區(開機過程中,系統默認會以fsck檢驗filesystem是否完整,但有些filesystem是不需要檢驗的,比如內存置換空間swap,或者特殊文件系統如/proc,/sys等,這裏可以設置0是不要檢驗,1表示最早檢驗,一般只有根目錄會設爲1, 2也是檢驗)
要添加某個文件系統進行開機即掛載,只需要在/etc/fstab文件中根據以上格式加入一行即可。再寫入之後,保證這個文件系統現在沒有掛載,然後利用mount -a命令將所有文件系統進行掛載(df查看),用來測試我們寫的是否正確,否則在開機的時候就會出現問題。

掛載映像文件:mount -o loop /root/ccentos5.2_x86_64.iso /mnt/centos_dvd
這樣iso中的數據在目錄/mnt/centos_dvd中可以看見
umount /mnt/centos_dvd 卸載‘

建立大型檔案(以512M爲例)這樣就可以在原本的分隔槽在不更動原有的環境下作出你想要的分隔槽
dd if=/dev/zero of=/home/loopdev bs=1M count=512
if是input file,輸入檔案,/dev/zero是會一直輸出0的裝置
of是output file,將一堆零寫入到後面接的檔案中
bs是每隔block大小,就像文件系統那樣的block意義
count則是總共多少個bs
然後進行格式化:mkfs -t ext3 /home/loopdev
掛載:mount -o loop /home/loopdev /media/cdrom/

使用實體分隔槽建置swap
使用檔案建置swap
在內存不夠用的時候,纔會用到swap,因爲內存不足時,會將某些所佔內存的程序移動到swap中,來騰出空間

安裝到filesystem最前面的1024bytes內的區域,是boot sector,接下來是superblock。對於1K的block,則它們分別佔用一個block,對於2K,4K的block,則它們一起放在同一個block裏面,即block 0.

ll -s出來的total表示總耗費的block數*block的大小,在所列文件的開頭的數字表示該文件耗費的block數*block大小,它們的綜合等於total,但是後面的所用容量的和比total小很多,這就是浪費了。

parted 可以分割2TB這樣大容量的分隔槽(小分割的話就用fdisk)
parted [裝置] [指令[參數]]
新增分割:mkpart [primary|logical|extended] [ext3|vfat] 開始 結束
分割表:print
刪除分割:rm [partition]



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