1. 程式人生 > >Linux磁碟分割槽的詳細步驟(圖解linux分割槽命令使用方法)

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 nameFilesystem stateInode countBlock countBlock 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就可以查詢分割槽的所有命令,簡單易懂。

有兩個命令我得著重強調。。。。

wq
此命令會使你的所有對磁碟的操作全部生效,如果不清楚自己所作所為的後果,此命令請慎用。退出磁碟分割槽程式,之前所有的操作都無效,當然前提是你沒有用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:還有一些東西沒寫完,以後更新。。