鳥哥的Linux私房菜讀書筆記--磁碟的分割槽、掛載、格式化與檢驗
1、觀察磁碟分割槽狀態
命令 : $ lsblk ##列出系統上的所有磁碟列表 lsblk 可以看成『 list block device 』的縮寫,就是列出所有儲存裝置的意思!這個工具軟體真的很好 用喔!來瞧一瞧! 命令 : $ lsblk [-dfimpt] [device] 選項與引數: -d :僅列出磁碟本身,並不會列出該磁碟的分割槽資料 -f :同時列出該磁碟內的檔案系統名稱 -i :使用 ASCII 的線段輸出,不要使用複雜的編碼 (再某些環境下很有用) -m :同時輸出該裝置在 /dev 底下的許可權資料 (rwx 的資料) -p :列出該裝置的完整檔名!而不是僅列出最後的名字而已。 -t :列出該磁碟裝置的詳細資料,包括磁碟佇列機制、預讀寫的資料量大小等
· NAME:就是裝置的檔名囉!會省略 /dev 等前導目錄! · MAJ:MIN:其實核心認識的裝置都是透過這兩個程式碼來熟悉的!分別是主要:次要裝置程式碼! · RM:是否為可卸除裝置 (removable device),如光碟、USB 磁碟等等 · SIZE:當然就是容量囉! · RO:是否為只讀裝置的意思 · TYPE:是磁碟 (disk)、分割槽槽 (partition) 還是隻讀儲存器 (rom) 等輸出 · MOUTPOINT:就是前一章談到的掛載點!
命令 : $ blkid ##列出裝置的 UUID 等引數 雖然 lsblk 已經可以使用 -f 來列出檔案系統與裝置的 UUID 資料,UUID 是全域性單一識別符號 (universally unique identifier),Linux 會將系統內所有的裝置都給予一個獨一無二的識別符號, 這個識別符號就可以拿來作為掛載或者是使用這個裝置/檔案系統之用了。 命令 : $ blkid /dev/vda2: UUID="94ac5f77-cb8a-495e-a65b-2ef7442b837c" TYPE="xfs" /dev/vda3: UUID="WStYq1-P93d-oShM-JNe3-KeDl-bBf6-RSmfae" TYPE="LVM2_member"
命令:$ parted 磁碟位置 print ##列出磁碟的分割槽表型別與分割槽資訊
2、磁碟分割槽
注意:MBR分割槽表使用fdisk分割槽,GPT分割槽表情使用gdisk分割槽
命令:$ gdisk 裝置名稱 範例:由前一小節的 lsblk 輸出,我們知道系統有個 /dev/vda,請觀察該磁碟的分割槽與相關資料 命令:$ gdisk /dev/vda <==仔細看,不要加上數字喔! GPT fdisk (gdisk) version 0.8.6 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. <==找到了 GPT 的分割槽表! Command (? for help): <==這裡可以讓你輸入指令動作,可以按問號 (?) 來檢視可用指令 Command (? for help): ? 你應該要透過 lsblk 或 blkid 先找到磁碟,再用 parted /dev/xxx print 來找出內部的分割槽表型別,之後才用 gdisk 或 fdisk 來作業系統。 上表中可以發現 gdisk 會掃描 MBR 與 GPT 分割槽表。 不管你進行了什麼動作,只要離開 gdisk 時按下『q』,那麼所有的動作『都不會生效!』相反的, 按下『w』就是動作生效的意思。所以,你可以隨便玩 gdisk ,只要離開時按下的是『q』即可。
** 用 gdisk 新增分割槽槽 命令 :$ gdisk /dev/vda Command (? for help): p Number Start (sector) End (sector) Size Code Name 1 2048 6143 2.0 MiB EF02 2 6144 2103295 1024.0 MiB 0700 3 2103296 65026047 30.0 GiB 8E00 # 找出最後一個 sector 的號碼是很重要的! Command (? for help): ? # 查一下增加分割槽的指令為何 Command (? for help): n # 就是這個!所以開始新增的行為! Partition number (4-128, default 4): 4 # 預設就是 4 號,所以也能 enter 即可! First sector (34-83886046, default = 65026048) or {+-}size{KMGTP}: 65026048 # 也能 enter Last sector (65026048-83886046, default = 83886046) or {+-}size{KMGTP}: +1G # 決不要 enter,絕對不要使用預設值! 因為預設值會將所有的容量用光!因此 它預設選擇最大的扇區號碼! 因為我們 僅要 1GB 而已,所以你得要加上 +1G 這樣即可! # 這個地方可有趣了!我們不需要自己去計算扇區號碼,透過 +容量 的這個方式, # 就可以讓 gdisk 主動去幫你算出最接近你需要的容量的扇區號碼喔! Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): # 使用預設值即可~直接 enter 下去! # 這裡在讓你選擇未來這個分割槽槽預計使用的檔案系統!預設都是 Linux 檔案系統的 8300 囉! 命令: $ partprobe -s ##更新Linux核心的分割槽表資訊
命令:$ gdisk 裝置名 ##刪除分割槽槽
3、磁碟格式化
格式化==建置檔案系統
XFS檔案系統格式化
命令:$ mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \ [-r parms] 裝置名稱 選項與引數: 關於單位:底下只要談到『數值』時,沒有加單位則為 bytes 值,可以用 k,m,g,t,p (小寫)等來解釋比較特殊的是 s 這個單位,它指的是 sector 的『個數』 -b :後面接的是 block 容量,可由 512 到 64k,不過最大容量限制為 Linux 的 4k 喔! -d :後面接的是重要的 data section 的相關引數值,主要的值有: agcount=數值 :設定需要幾個儲存群組的意思(AG),通常與 CPU 有關 agsize=數值 :每個 AG 設定為多少容量的意思,通常 agcount/agsize 只選一個設定即可 file :指的是『格式化的裝置是個檔案而不是個裝置』的意思!(例如虛擬磁碟) size=數值 :data section 的容量,亦即你可以不將全部的裝置容量用完的意思 su=數值 :當有 RAID 時,那個 stripe 數值的意思,與底下的 sw 搭配使用 sw=數值 :當有 RAID 時,用於儲存資料的磁碟數量(須扣除備份碟與備用碟) sunit=數值 :與 su 相當,不過單位使用的是『幾個 sector(512bytes 大小)』的意思 swidth=數值 :就是 su*sw 的數值,但是以『幾個 sector(512bytes 大小)』來設定 -f :如果裝置內已經有檔案系統,則需要使用這個 -f 來強制格式化才行! -i :與 inode 有較相關的設定,主要的設定值有: size=數值 :最小是 256bytes 最大是 2k,一般保留 256 就足夠使用了! internal=[0|1]:log 裝置是否為內建?預設為 1 內建,如果要用外部裝置,使用底下設定 logdev=device :log 裝置為後面接的那個裝置上頭的意思,需設定 internal=0 才可! size=數值 :指定這塊登入區的容量,通常最小得要有 512 個 block,大約 2M 以上才行! -L :後面接這個檔案系統的標頭名稱 Label name 的意思! -r :指定 realtime section 的相關設定值,常見的有: extsize=數值 :就是那個重要的 extent 數值,一般不須設定,但有 RAID 時, 最好設定與 swidth 的數值相同較佳!最小為 4K 最大為 1G 。
EXT4檔案系統格式化
命令:$ mkfs.ext4 [-b size] [-L label] 裝置名稱 選項與引數: -b :設定 block 的大小,有 1K, 2K, 4K 的容量, -L :後面接這個裝置的標頭名稱。
其他檔案系統格式化
mkfs是個綜合指令,當我們使用 mkfs -t xfs 時,它就會跑去找 mkfs.xfs 相關的引數給我們使用! 如果想要知道系統還支援哪種檔案系統的格式化功能,直接按 [tabl] 就很清楚了!
4、檔案系統檢驗
xfs_repair 處理 XFS 檔案系統 當有 xfs 檔案系統錯亂才需要使用這個指令!所以,這個指令最好是不要用到啦!但有問題發生時, 這個指令卻又很重要... 命令:$ xfs_repair [-fnd] 裝置名稱 選項與引數: -f :後面的裝置其實是個檔案而不是實體裝置 -n :單純檢查並不修改檔案系統的任何資料 (檢查而已) -d :通常用在單人維護模式底下,針對根目錄 (/) 進行檢查與修復的動作!很危險!不要隨便使用
fsck.ext4 處理 EXT4 檔案系統 fsck 是個綜合指令,如果是針對 ext4 的話,建議直接使用 fsck.ext4 來檢測比較妥當!那 fsck.ext4 的選項有底下幾個常見的專案: 命令:$ fsck.ext4 [-pf] [-b superblock] 裝置名稱 選項與引數: -p :當檔案系統在修復時,若有需要回復 y 的動作時,自動回覆 y 來繼續進行修復動作。 -f :強制檢查!一般來說,如果 fsck 沒有發現任何 unclean 的旗標,不會主動進入 細部檢查的,如果您想要強制 fsck 進 入細部檢查,就得加上 -f 旗標囉! -D :針對檔案系統下的目錄進行優化配置。 -b :後面接 superblock 的位置!一般來說這個選項用不到。但是如果你的 superblock 因故損毀時,透過這個引數即可利 用檔案系統內備份的 superblock 來嘗試救援。一般來說,superblock 備份在:1K block 放在 8193, 2K block 放 在 16384, 4K block 放在 32768
5、檔案系統的掛載與卸除
注意 · 單一檔案系統不應該被重複掛載在不同的掛載點(目錄)中; · 單一目錄不應該重複掛載多個檔案系統; · 要作為掛載點的目錄,理論上應該都是空目錄才是。如果你要用來掛載的目錄裡面並不是空的,那麼掛載了檔案系統 之後,原目錄下的東西就會暫時的消失。 命令: $ mount -a 命令: $ mount [-l] 命令: $ mount [-t 檔案系統] LABEL='' 掛載點 命令: $ mount [-t 檔案系統] UUID='' 掛載點 # 鳥哥近期建議用這種方式喔! 命令: $ mount [-t 檔案系統] 裝置檔名 掛載點 選項與引數: -a :依照配置檔案 /etc/fstab 的資料將所有未掛載的磁碟都掛載上來 -l :單純的輸入 mount 會顯示目前掛載的資訊。加上 -l 可增列 Label 名稱! -t :可以加上檔案系統種類來指定欲掛載的型別。常見的 Linux 支援型別有:xfs, ext3, ext4, reiserfs, vfat, iso9660(光碟 格式), nfs, cifs, smbfs (後三種為網路檔案系統型別) -n :在預設的情況下,系統會將實際掛載的情況實時寫入 /etc/mtab 中,以利其他程式的運作。 但在某些情況下(例如單 人維護模式)為了避免問題會刻意不寫入。此時就得要使用 -n 選項。 -o :後面可以接一些掛載時額外加上的引數!比方說賬號、密碼、讀寫許可權等:async, sync: 此檔案系統是否使用同步寫 入 (sync) 或非同步 (async) 的 記憶體機制,請參考檔案系統運作方式。預設為 async。 atime,noatime: 是否修訂檔案的讀取時間(atime)。為了效能,某些時刻可使用 noatime ro, rw: 掛載檔案系統成為只讀(ro) 或可擦寫(rw) auto, noauto: 允許此 filesystem 被以 mount -a 自動掛載(auto) dev, nodev: 是否允許此 filesystem 上,可建立裝置檔案? dev 為可允許 suid, nosuid: 是否允許此 filesystem 含有 suid/sgid 的檔案格式? exec, noexec: 是否允許此 filesystem 上擁有可執行 binary 檔案? user, nouser: 是否允許此 filesystem 讓任何使用者執行 mount ?一般來說,mount 僅有 root 可以進行,但下 達 user 引數,則可讓 一般 user 也能夠對此 partition 進行 mount 。 defaults: 預設值為:rw, suid, dev, exec, auto, nouser, and a
remount: 重新掛載,這在系統出錯,或重新更新引數時,很有用!