Linux磁碟分割槽的詳細步驟(圖解linux分割槽命令使用方法)
前言
磁碟是怎麼分割槽的在文章後面會談到,先談一下Linux檔案系統的簡單操作。不過在閱讀本文之前,我假定讀者們對Linux的磁碟與檔案系統以及目錄樹已經有了初步的瞭解。
操作檔案系統
介紹操作檔案系統的幾個命令。
檢視磁碟/目錄樹
一、df命令檢視磁碟的分割槽和已經使用量
解釋下輸出的第一行中某些欄位的含義:
檔案系統 | 容量 | 已用 | 可用 | 掛載點 |
代表磁碟的分割槽和記憶體中的某一個區域。 | 磁碟總共的容量 | 磁碟已經使用的容量 | 磁碟未使用的容量 | 該檔案系統掛載在哪一個目錄下 |
從圖中可以看出我的磁碟其實是分了四個區的,分別是/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4,這裡不顯示/dev/sda3的原因是因為我分割槽的時候把/dev/sda3掛載到來swap下。
另外的udev、tmps等是系統執行時,在記憶體劃分的一部分割槽域。這部分割槽域被臨時掛載到檔案樹下。
另外,df是讀取整個檔案系統中的superblock中的資料來輸出的,所以速度很快。
df還有一些其他的命令引數,可以用man檢視。
二、利用du命令查詢當前目錄下的所有目錄/檔案所佔的容量
上圖顯示了Java工程目錄下的所有檔案/目錄,左側是佔據的容量,右側是具體的檔名/目錄名。
三、dumpe2fs檢視分割槽的具體使用情況
檢視/dev/sda2這個分割槽,下面解釋一下相關資料。
Filesystem volume name | Filesystem state | Inode count | Block count | Block size |
檔案系統的別名,可以自己取名 | 檔案系統的狀態,如果是clean則表示正常 | Inode的數量 | Block塊的數量 | 每一個Block塊的大小,目前只有1KB,2KB,4KB的取值 |
關於連線檔案
在windwos中,連線檔案就相當於一個快捷方式,然而在Linux卻沒有這麼簡單。
一、檔案是怎麼被讀取的
在Linux中,一個檔案分為兩個部分,一個是檔案的許可權和屬性,另外一個是檔案的具體內容,這兩者分別存放在inode塊和block塊中。而每個block塊都有一個索引號碼,這個索引號碼會被記錄在inode裡面。
一個檔案可能會很大,所以需要多個block塊來存放一個檔案的所有內容。每個block的索引都會被記錄在inode裡面。同時,每個單一檔案只允許有一個inode塊。
所以讀取一個檔案的流程是這個樣子的,先讀取這個檔案inode塊裡面存放的所有索引號碼,然後按照號碼去尋找對應的block塊,最後讀取block塊裡面的內容。
看起來很簡單,對吧! 然而問題來啦,檔案的inode是怎麼被讀取的??
答案是通過目錄讀取。Linux是一個目錄樹結構,所有的檔案全部存放在目錄下,想要讀取一個檔案,必先讀取其目錄。一個目錄也是由inode和block塊構成的,區別是目錄的block塊中存放的是該目錄下所有檔案的檔名和該檔案的inode號碼的對映。
舉個例子:讀取/bin/ln這個檔案。
- 讀取“/”目錄,因為“/”是掛載點,所以可以知道掛載點的inode號碼是2,
- 讀取bin目錄,通過“/”的inode找到“/”的block塊,在這個block塊裡面查詢看是否有“bin”這個檔名字,找到這個名字並返回這個名字對應的inode號碼,也就是130817。
- 通過編號為130817的inode塊來找到對應block塊,並查詢是否有ln這個檔名,找到這個名字並返回對應的inode號碼,也就是130894。
- 在130894這個inode中,來查詢所有儲存了block索引的記錄,並讀取對應索引的block。完畢。
二、硬連線
鋪墊了這麼多,現在迴歸主題。
在Linux中,生成這個所謂的“快捷方式”有兩種,一種是硬連線,另外一種是軟連線,先介紹硬連線。
舉例說明:我現在要在“/root”目錄下建立一個對“/bin/ln”的硬連線,連線名字是ln2。那麼Linux它會這樣做,它會在“/root”目錄的block塊中新增一條檔名和inode號碼的對映,檔名自然是ln2,inode號碼就是“/bin/ln”檔案的inode號碼。
上圖:
在“/root”目錄下生成了ln2的檔案,如果雙擊它,就會執行“/bin/ln”檔案。看看最前面的號碼130894,兩個都是一樣的,表示ln和ln2都是連線到同一個inode號碼。
還有一點就是,注意到輸出資料中的2嗎?就是在-rwxr-xr-x後面的,代表的是有多少個硬連線連線到了這個檔案。
三、軟連線
硬連線只是在目錄的block塊裡面添加了一條額外的對映記錄,並沒有多佔用額外的inode塊和block塊,但是軟連線就不同了。
軟連線是直接新建一個檔案。由於一個檔案對應一個inode塊和至少一個block塊,所以新建一個軟連線就至少會佔用兩個block塊。其中inode的作用就不用說了,自然是用來記錄屬性許可權和block索引的。但是軟連線的block塊作用是儲存你要連線的檔案的完整路徑。
上圖舉例子:
注意區別,兩個檔案的inode號碼不一樣!!說明我們新建了一個檔案。還有,你們看到了那個數字7嗎,這個位置的值通常代表檔案內容的大小,可是為什麼是7呢?記得剛剛說的“軟連線的block塊是用來儲存你要連線的檔案的檔名”,“/bin/ln”正好7個字元,一個字元就是一個byte,所以檔案內容是7個byte。(其他的區別讀者們自己去體會)
四、軟連線和硬連線的區別。
- 軟連線會佔用額外inode塊和block塊,而硬連線不會。(忽略block塊恰好被沾滿的情況)
- 如果我將“/bin/ln”這個檔案刪除,那麼作為硬連線的“/root/ln2”還是可以正常工作,因為檔案被存放在block塊中,檔案刪除只不過是抹去了block上的資料。(這裡的正常工作指的是還能夠訪問之前“/bin/ln”所佔用的block塊)
- 如果將“/bin/ln”刪除,那麼軟連線“/root/ln3”將無法工作,它會顯示找不到原始檔。因為軟連線儲存的是路徑,現在這個路徑已經沒有了。
PS:感覺這個連線我似乎沒有講清楚。有意見請提
磁碟的分割槽–命令fdisk
前面都是鋪墊,後面才是具體的磁碟管理操作。但是磁碟的分割槽只是磁碟管理的一小部分。
本人只有一塊磁碟,在Linux中分配的名字是/dev/sda,用之前的df可以檢視。
看到沒,上面的/dev/sda2、/dev/sda4等等,去掉那個數字就是你的磁碟裝置名字。現在就要進入這個裝置檢視一下。
看圖,上面說明了一切。
按照提示,你輸入m就可以查詢分割槽的所有命令,簡單易懂。
有兩個命令我得著重強調。。。。
w | q |
此命令會使你的所有對磁碟的操作全部生效,如果不清楚自己所作所為的後果,此命令請慎用。 | 退出磁碟分割槽程式,之前所有的操作都無效,當然前提是你沒有用w。 |
輸入p,看它告訴我什麼資訊:
原來我的磁碟分為四個區sda1、sda2、sda3、sda4
現在來刪除一個分割槽試試,輸入d:
輸入d後,電腦要求你輸入你想刪除的區號,於是我輸入了2。
再輸入p檢視一下:
臥槽,sda2沒了。。。
破罐子破摔,全部刪掉吧。。。刪掉來重新新增,新增用n就行。。
看見沒,讓你輸入新建區的起始扇區號碼,和結束扇區號碼,建立成功來,用p檢視一下。
不玩了,按q退出。
我在Ubuntu安裝時,預留了20G的磁碟空間沒有進行分割槽,這次我取出2G用來重新做示範。
其中的sda5就是從空閒空間拿出來的2G。
在此處提醒下,輸入p查詢是不會將沒有分割槽的磁碟空間顯示出來的,你只有輸入n,系統才會讓你知道原來你還有空間未被分配。
這裡我按了w來寫入磁碟。寫入的確是成功了,不過系統並沒有重新區讀取這個分割槽表,我是不想開機重啟的,所以用這個命令去強制它讀取吧。
將分好的磁碟格式化
選擇一種檔案格式將新建的分割槽初始化,是為了讓Linux能夠識別這個分割槽裡面的檔案。所謂的檔案格式就是,磁碟的檔案是按照怎樣的一種形式組織起來,之前提到的檔案由兩部分組成的,比如inode,block等,就是Linux的所能夠識別的檔案格式的一種。
格式化的命令 - mkfs
mkfs -t 檔案格式 裝置檔名
這裡手賤,檔案格式寫成ext3了,應該用ext4的,得再重新格式化一次。。
完畢。
PS:還有一個命令是mke2fs,自行man。
檢查磁碟是否有問題
命令 fsck
系統跑久了,磁碟會出現一些問題,比如壞道,檔案損壞之類的。。。(其實我也不太懂,抱歉)。
fsck命令是用來檢驗磁碟是否有問題的,相關引數自行man。
值得注意的一點是:fsck命令可能會損壞檔案系統,所以被fsck掃描的分割槽請不要被掛載。
掛載/解除安裝磁碟
一、掛載磁碟
這裡我打算把sda5掛載到“mnt/sda5”這個目錄,這個目錄是不存在的,所以要建立。
掛載的命令是mount,命令有點複雜,自行man。
注意命令:mount <裝置名稱> <掛載的目錄>
弄完了用df檢視一下,看最後一行的/mnt/sda5,是不是成功了!
以下幾點要注意:
- 掛載的目錄必須為空,否則目錄裡面的資料會被隱藏,直到裝置被解除安裝才會顯現。
- 掛載的目錄每次只能掛載一個裝置。
- 同一個裝置每次只能掛載到一個目錄。
感覺太簡單了。。。其實mount是比較複雜的,但用起來簡單的原因是系統已經幫我們把許多東西都做好了,真實的過程是這樣的:
- 掛載時,系統要知道裝置是何種檔案系統,是ext4還是其他的什麼。
- 然而系統是不知道裝置是什麼檔案系統系統的,所以它要測試裝置是哪一種檔案系統,看自己能不能支援,如果支援,則對裝置進行掛載。
- 對於Linux支援的檔案系統,Linux都會有一個驅動,它會利用這個驅動來測試檔案系統的superblock,看能不能匹配。(幾乎每個檔案系統都會有superblock)
所以說有這個檔案很重要:/proc/filesystems
這個檔案記錄leLinux所有已經載入的檔案系統
還有一個:/lib/modules/$(uname -r) /kernel/fs/
這個資料夾下面所有的檔案都對應著某一個檔案系統的驅動。
二、解除安裝磁碟
很簡單的:umount <裝置名字/掛載點>
開機掛載
一般情況下,如果你再次開機,就會發現之前已經掛載的磁碟必須手動再次掛載一次,不信可以用df命令檢視一下。
為了開機自動掛載磁碟,只需要配置一下 /etc/fstab檔案即可。
不同的Linux distribution的 fstab檔案可能不一樣,我的Ubuntu如上所示,需要在末尾新增一些配置才能開機掛載sda5,不過我得先解釋下這6列的含義。
file system | mount point | type | options | dump | pass |
裝置名稱。磁碟號的UUID | 掛載點 | 分割槽型別.linux分割槽一般為ext4。 | 掛載引數。一般為defaults。常用引數如下: auto:開機自動掛載。 default:按照大多數永久檔案系統的預設值設定掛載定義。 noauto:開機不自動掛載。 nouser:只有超級使用者可以掛載。 ro:按只讀許可權掛載。 rw:按可讀可寫許可權掛載。 user:任何使用者都可以掛載。 | 磁碟備份。預設為0,表示不備份。 | 磁碟檢查。預設為0,表示不檢查。 |
關鍵是怎麼查詢UUID號碼,看這個:
查詢到後,新增如下配置:
這樣就可以了。
PS:還有一些東西沒寫完,以後更新。。