1. 程式人生 > >linux磁盤管理之df和du命令

linux磁盤管理之df和du命令

director comm 方式 問題 參數 war 管理 缺省 ID

df 查看已掛載磁盤的總容量、使用容量、剩余容量等,可以不加任何參數,默認是按k為單位顯示的

技術分享圖片

df常用參數有 –i -h -k –m等

-i 使用inodes 顯示結果

技術分享圖片

-h 使用合適的單位顯示,例如G

技術分享圖片

-k -m 分別為使用K,M為單位顯示

技術分享圖片

簡單介紹一下,你看到的相關數據。Filesystem 表示扇區,也就是你劃分磁盤時所分的區;1K-blocks/1M-blocks表示以1K/1M為單位;Used 和 Available 分別是已使用和剩余;Use% 就是已經使用的百分比,如果這個值大於90% 那麽你就應該註意了,磁盤很有可能馬上就會變滿的;Mounted on 則表示該分區(扇區)所掛載的地方。

du 用來查看某個目錄所占空間大小

語法:du [-abckmsh] [文件或者目錄名] 常用的參數有:

-a:全部文件與目錄大小都列出來。如果不加任何選項和參數只列出目錄(包含子目錄)大小。

技術分享圖片

-b:列出的值以bytes為單位輸出,默認是以Kbytes

技術分享圖片

-c:最後加總

技術分享圖片

-k:以KB為單位輸出

-m:以MB為單位輸出

-s:只列出總和

-h:系統自動調節單位,例如文件太小可能就幾K,那麽就以K為單位顯示,如果大到幾G,則就以G為單位顯示。筆者習慣用 du –sh filename 這樣的形式。

技術分享圖片

磁盤的分區和格式化

筆者經常做的事情就是拿一個全新的磁盤來分區並格式化。這也說明了作為一個linux系統管理員,對於磁盤的操作必須要熟練。所以請你認真學習該部分內容。

fdisk linux下的硬盤分區工具

語法: fdisk [-l ] [設備名稱]

-l :後邊不跟設備名會直接列出系統中所有的磁盤設備以及分區表,加上設備名會列出該設備的分區表。

技術分享圖片

技術分享圖片

如果不加-l 則進入另一個模式,在該模式下,可以對磁盤進行分區操作。

技術分享圖片

剛進入該模式下,會有一個提示Command (m for help): 此時按m則會打印出幫助列表,如果你英文好,我想你不難理解這些字母的功能。筆者常用的有p, n,d, w, q.

P:打印當前磁盤的分區情況。

技術分享圖片

n:重新建立一個新的分區。

w:保存操作。

q:退出。

d:刪除一個分區

因為筆者的linux系統是安裝在虛擬機上的,所以我可以增加一塊新的磁盤。然後筆者會把新的磁盤分成多個分區。

技術分享圖片

當再次fdisk -l 查看時發現多了一個/dev/hdb 設備,並提示該設備沒有可用的分區表。那麽下面就來分一下這個/dev/hdb.

技術分享圖片

首先用p查看一下,並沒有任何分區信息。

技術分享圖片

用n創建一個新的分區,會提示要建立e (extended 擴展分區)或者p (primary partition主分區),這裏筆者選擇主分區,所以按了p回車後,又讓輸入First cylinder 你或者直接回車或者輸入一個數字,因為這塊磁盤是新的並沒有任何分區,所以直接回車其實就是從1開始了。你也可以自定義輸入,但不要超過2080,筆者這裏輸入1回車。此時會提示要分多大,可以寫一個數值(2-2080),也可以輸入+sizeK或者+sizeM,後者比較直觀容易理解,所以筆者在這裏輸入+100M,即我分了一個100M的主分區。再用p查看時,果真多出來一個分區。然後筆者繼續重復前面的操作,建立了4個主分區。當筆者再次輸入n創建分區時,結果提示錯了。

技術分享圖片

由此你會發現,在linux中最多只能創建4個主分區,那如果你想多創建幾個分區如何做?很容易,在創建完第三個分區後,創建第四個分區時選擇擴展分區。

技術分享圖片先刪除第四個主分區,然後建立一個擴展分區

技術分享圖片

在建立擴展分區時,會問你要分多少給這個擴展分區,筆者直接回車,即把所有空間都分給了這個擴展分區。這個擴展分區/dev/hdb4並不能往裏寫數據,它只是一個空殼子,需要我們繼續在這個空殼中繼續創建分區。

技術分享圖片

當建立完擴展分區,然後按n創建新分區時你會發現不再提示是要建立p還是e了,因為我們已經不能再創建p了。在這裏需要你明白的是,hdb5 其實只是 hdb4 中的一個子分區,到目前為止可用的分區也才4個,那筆者就再創建第5個分區出來。

技術分享圖片

然後按w保存,該模式自動退出,如果你不想保存分區信息直接按q即可退出。

技術分享圖片

下面我們把剛分好的分區刪除,重新建立分區。如何刪除你還記得吧,對了就是直接按d然後選擇合適的數字。刪除完所有分區後,這塊磁盤就恢復如初了。

技術分享圖片

技術分享圖片

第一個分區,我們就建立成擴展分區。並且分給它200M。

技術分享圖片

當再次新建分區時,發生了變化,不再是p或者e了,而是p或者l(邏輯分區),這是為什麽呢?在上面也提到了,一個擴展分區只是一個空殼,在擴展分區下才可以繼續劃分小的分區,這個小的分區其實就是邏輯分區了。

技術分享圖片

而且這個邏輯分區默認都是從字數5開始的,因為前面的數字要麽給主分區留著,要麽給擴展分區留著。由此我們也可以得到,在linux中最多可以創建4個主分區,一旦創建4個主分區後就不能增加任何分區了。另外最多也只能創建一個擴展分區。擴展分區下的邏輯分區最多可以創建多少呢?IDE的硬盤(類似於hda, hdb, hdc 等)最多可以創建10個(hdb5-hdb15),這是筆者試驗出來的結果。有的資料說linux下的邏輯分區是沒有限制的,也有的說最大可以到64,至於對不對,需要你去近一步考察了,我們沒有必要多麽深入的研究這個問題,也沒有什麽意義。

通過以上操作,相信你也學會了用fdisk 來分區了吧。值得提出的是,不要閑著沒事分區玩兒,這操作的危險性是很高的,一不留神就把你服務器上的數據全部給分沒有了。如果有分區的操作,那麽請保持百分之二百的細心,切記切記!

mkfs.ext2 / mkfs.ext3 /mke2fs 格式化linux硬盤分區

當用man查詢這三個命令的幫助文檔時,你會發現我們看到了同一個幫助文檔,這說明三個命令是一樣的。常用的選項有:

-b:分區時設定每個數據區塊占用空間大小,目前支持1024, 2048 以及4096 bytes每個塊。

-i:設定inode大小

-N:設定inode數量,有時使用默認的inode數不夠用,所以要自定設定inode數量。

-c:在格式化前先檢測一下磁盤是否有問題,加上這個選項後會非常慢

-L:預設該分區的標簽label

-j:建立ext3格式的分區,如果使用mkfs.ext3 就不用加這個選項了

技術分享圖片

不加任何選項,直接格式化/dev/hdb1

技術分享圖片

上例中更改了block size為4096 默認是1024,而inode大小設定為4096。

下面的例子分區時自定義分區的label(標簽)名。

技術分享圖片

e2label 用來查看或者修改分區的標簽(label

這個命令很簡單,後邊直接跟分區編號,即可查看該分區的label,當想要修改標簽名時,分區編號後邊跟想要的標簽名即可。

技術分享圖片

fsck 檢查硬盤有沒有壞道

語法: fsck [-Aar] [分區]

-A :加該參數時,後不需要跟分區名作為參數。它會自動檢查/etc/fstab 文件下的所有分區(開機過程中就會執行一次該操作);

-a :自動修復檢查到有問題的分區;

-r :當檢查到有壞道的分區時會讓用戶決定是否修復。

技術分享圖片

當你使用fsck檢查磁盤有無壞道時,會提示用戶“跑這個任務可能會導致某些掛載的文件系統損壞”,所以這個命令不要輕易運行。否則真的遇到問題,系統甚至都不能啟動了。

技術分享圖片

掛載/卸載磁盤

在上面的內容中講到了磁盤的分區和格式化,那麽格式化完了後,如何去用它呢?這就涉及到了掛載這塊磁盤。格式化後的磁盤其實是一個塊設備文件,類型為b,也許你會想,既然這個塊文件就是那個分區,那麽直接在那個文件中寫數據不就寫到了那個分區中麽?當然不行。

在掛載某個分區前需要先建立一個掛載點,這個掛載點是以目錄的形式出現的。一旦把某一個分區掛載到了這個掛載點(目錄)下,那麽再往這個目錄寫數據使,則都會寫到該分區中。這就需要你註意一下,在掛載該分區前,掛載點(目錄)下必須是個空目錄。其實目錄不為空並不影響所掛載分區的使用,但是一旦掛載上了,那麽該目錄下以前的東西就不能看到了。只有卸載掉該分區後才能看到。

mount 掛載設備

技術分享圖片

先建立/test1 /test2 目錄,然後在/test1目錄下建立一個1.txt文件。

技術分享圖片

把/dev/hdb1分區掛載到/test1目錄,然後再查看/test1目錄發下,1.txt不存在了。此時往/test1目錄下寫數據,則會寫到/dev/hdb1分區中。在講mount的-a選項時,我們有必要先了解一下這個文件 /etc/fstab

技術分享圖片

這個文件是系統啟動時,需要掛載的各個分區。第一列就是分區的label;第二列是掛載點;第三列是分區的格式;第四列則是mount的一些掛載參數,等下會詳細介紹一下有哪些參數,一般情況下,直接寫defaults即可;第五列的數字表示是否被dump備份,是的話這裏就是1,否則就是0;第六列是開機時是否自檢磁盤,就是剛才講過的那個fsck檢測。1,2都表示檢測,0表示不檢測,在Redhat中,這個1,2還有個說法,/ 分區必須設為1,而且整個fstab中只允許出現一個1,這裏有一個優先級的說法。1比2優先級高,所以先檢測1,然後再檢測2,如果有多個分區需要開機檢測那麽都設置成2吧,1檢測完了後會同時去檢測2。下面該說說第四列中常用到的參數了。

async/sync :async表示和磁盤和內存不同步,系統每隔一段時間把內存數據寫入磁盤中,而sync則會時時同步內存和磁盤中數據;

auto/noauto :開機自動掛載/不自動掛載;

default:按照大多數永久文件系統的缺省值設置掛載定義,它包含了rw, suid, dev, exec, auto, nouser,async ;

ro:按只讀權限掛載 ;

rw:按可讀可寫權限掛載 ;

exec/noexec :允許/不允許可執行文件執行,但千萬不要把根分區掛載為noexec,那就無法使用系統了,連mount命令都無法使用了,這時只有重新做系統了;

user/nouser :允許/不允許root外的其他用戶掛載分區,為了安全考慮,請用nouser ;

suid/nosuid :允許/不允許分區有suid屬性,一般設置nosuid ;

usrquota :啟動使用者磁盤配額模式,磁盤配額相關內容在後續章節會做介紹;

grquota :啟動群組磁盤配額模式;

學完這個/etc/fstab後,我們就可以自己修改這個文件,增加一行來掛載新增分區。例如,筆者增加了這樣一行

/dev/hdb1 /test1 ext3 defaults 0 0

那麽系統再重啟時就會掛載這個分區了。

講完了/etc/fstab 我們繼續回來講這個mount,mout -a 如果運行了這個命令,則會把/etc/fstab中出現的所有磁盤分區掛載上。所以當你在/etc/fstab文件中增加一行後,你完全可以直接運行mount -a 來掛載你增加的那行,這樣就不用重啟啦。

你可以使用mount -o 選項來重新掛載一個分區,並同時指定你想要的選項(即上邊介紹fstab第六列中那些)

技術分享圖片

看到了吧,使用了ro選項,則不能新建文件了。

技術分享圖片

再重新掛載一次就恢復正常了,如果不加任何其他選項,則就是defaults。

筆者在日常的運維工作中遇到過這樣的情況,一臺服務器上新裝了亮塊磁盤,磁盤a(在服務器上顯示為sdc)和磁盤b(在服務器上顯示為sdd),有一次把這兩塊磁盤都拔掉了,然後再重新插上,重啟機器,結果磁盤編號調換了,a變成了sdd,b變成了sdc(這是因為把磁盤插錯了插槽),問題來了。通過上邊的學習,你掛載磁盤是通過/dev/hdb1 這樣的分區名字來掛載的,如果先前加入到了/etc/fstab 中,結果系統啟動後則會掛載錯分區。那麽怎麽樣避免這樣的情況發生?

blkid 這個命令是用來顯示磁盤分區uuid的,uuid其實就是一大串字符,在linux系統中每一個分區都會有唯一的一個uuid。說到這,聰明的你想到了吧,沒有錯,我們就用這唯一的uuid來掛載磁盤分區。

技術分享圖片

這個命令筆者只是用來顯示uuid,沒有其他用途所以不做詳細介紹,當然你也可以在命令後邊跟某一個分區,只顯示該分區的uuid。

技術分享圖片

看到了吧,其實是很好用的。那麽怎麽讓它也開機啟動?很簡單,把剛才敲的mount 磁盤的命令直接寫到 /etc/rc.d/rc.local 文件即可。對了,筆者到現在還沒有給你講過這個rc.local文件的作用。簡單點說,系統啟動完後會執行這個文件中的命令。所以只要你想開機後運行什麽命令統統寫入到這個文件下面吧。

技術分享圖片

其實這個文件就是一個shell 腳本,以後筆者會單獨用一章來介紹它。行開頭的”#”是註釋的意思,代表這行在這個腳本中不生效。你想讓系統開機後運行什麽命令,就把什麽命令寫到這裏面來。就比如剛才筆者掛載的那條命令。你可以這樣實現:

技術分享圖片

mount 還有一個比較常用的選項就是-t ,後邊指定文件系統的類型,比如掛載軟盤時就需要指定 vfat,而掛載光盤時就需要指定iso9660,但在筆者多年來的經驗,目前的系統都是智能識別所要掛載分區的系統格式類別的。也就是說,用不著你去指定,它會自動判斷的。

技術分享圖片

umount 卸載設備

現在你學會了如何掛載一個設備,那麽如何去卸載一個設備呢,這就要用到umount了,這個命令也簡單的很,後邊可以跟掛載點,也可以跟分區名(/dev/hdb1)

技術分享圖片

有時也許你會遇到比較難卸載的設備,就像在windows下無法刪除U盤一樣,教你一個特管用的方法就是 umount -l /dev/hdb1 ,這個-l選項有強制卸載的意思,你一定要記住哦,非常有用的。

建立一個swap文件

從裝系統時就接觸過這個swap了,前面也說過它類似與windows的虛擬內存,分區的時候一般大小為內存的2倍,如果你的內存超過4G,那麽你分8G似乎是沒有必要了。分4G足夠日常交換了。然而,還會有虛擬內存不夠用的情況發生。如果真遇到了,莫非還要重新分一下磁盤?當然不能!那我們就增加一個虛擬的磁盤出來。

基本的思路就是:建立swapfile ? 格式化為swap格式 ? 啟用該虛擬磁盤

技術分享圖片

利用dd 來創建一個419M的文件/tmp/newdisk出來,其中if代表從哪個文件讀,/dev/zero是linux下特有的一個0生成器,of表示輸出到哪個文件,bs即塊大小,count則定義有多少個塊。

技術分享圖片

mkswap 這個命令是專門格式化swap格式的分區的,這個命令用的時候一定要看清楚了,否則把其他分區給格式化錯了就只有哭了。

技術分享圖片

free 是用來查看系統內存以及虛擬內存使用情況的,-m選項是以M的形式查看。可以看到當前系統的。而swapon 是啟用我們新建的swap文件,啟用後再用free查看發現多了400M。

技術分享圖片

我們還可以用swapoff 關閉啟用的swap文件。

磁盤配額

磁盤配合其實就是給每個用戶分配一定的磁盤額度,只允許他使用這個額度範圍內的磁盤空間。在linux系統中,是多用戶多任務的環境,所以會有很多人共用一個磁盤的情況。針對每個用戶去限定一定量的磁盤空間是有必要的,這樣才顯得公平。

在linux中,用來管理磁盤配額的東西就是quota了。如果你的linux上沒有quota,則需要你安裝這個軟件包 quota-3.13-5.el5.RPM (其實版本是多少無所謂了,關鍵是這個軟件包)。quota在實際應用中是針對整個分區進行限制的。如果你的/dev/hda3 是掛載在/home 目錄下的,那麽/home 所有目錄都會受到限制。

quota 這個模塊主要分為quota quotacheck quotaoff quotaon quotastats edquota setquota warnquota repquota這幾個命令,下面就分別介紹這些命令。

quota 用來顯示某個組或者某個使用者的限額。

語法:quota [-guvs] [user,group]

-g :顯示某個組的限額

-u :顯示某個用戶的限額

-v :顯示的意思

-s :選擇inod或硬盤空間來顯示

quotacheck 用來掃描某一個磁盤的quota空間。

語法:quotacheck [-auvg] /path

-a :掃描所有已經mount的具有quota支持的磁盤

-u :掃描某個使用者的文件以及目錄

-g :掃描某個組的文件以及目錄

-v :顯示掃描過程

-m :強制進行掃描

edquota 用來編輯某個用戶或者組的quota值。

語法:edquota [-u user] [-g group] [-t]

edquota -p user -u user

-u :編輯某個用戶的quota

-g :編輯某個組的quota

-t :編輯寬限時間

-p :拷貝某個用戶或組的quta到另一個用戶或組

當運行edquota -u user 時,系統會打開一個文件,你會看到這個文件中有7列,它們分別代表的含義是:

Filesystem :磁盤分區,如/dev/hda3

blocks :當前用戶在當前的Filesystem中所占用的磁盤容量,單位是Kb。該值請不要修改。

soft/hard :當前用戶在該Filesystem內的quota值,soft指的是最低限額,可以超過這個值,但必須要在寬限時間內將磁盤容量降低到這個值以下。hard指的是最高限額,即不能超過這個值。當用戶的磁盤使用量高於soft值時,系統會警告用戶,提示其要在寬限時間內把使用空間降低到soft值之下。

inodes :目前使用掉的inode的狀態,不用修改。

quotaon 啟動quta,在編輯好quota後,需要啟動才能是quta生效

語法:quotaon [-a] [-uvg directory]

-a :全部設定的quota啟動

-u :啟動某個用戶的quota

-g :啟動某個組的quota

-s :顯示相關信息

quotaoff 關閉quota

該命令常用只有一種情況 quotaoff -a 關閉全部的quota

以上講了很多quota的相關命令,那麽接下來筆者教你如何在實踐應用中去做這個磁盤配額。整個執行過程如下:

首先先確認一下,你的/home目錄是不是單獨的掛載在一個分區下,用df 查看即可。如果不是則需要你跟我一起做。否則這一步即可省略。

技術分享圖片

筆者的linux系統中,/home並沒有單獨占用一個分區。所以需要把/home目錄掛載在一個單獨的分區下,因為quota是針對分區來限額的。

技術分享圖片

筆者用fdisk -l 查看目前/dev/hdb 磁盤有5個可用分區,所以筆者打算把/dev/hdb1掛載在/home 目錄下

技術分享圖片

看到了吧,目前筆者的/home目錄已經是一個單獨的分區了。

1)建立測試用戶

技術分享圖片

首先建立一個test用戶,則同時建立了一個test組。可以在/etc/passwd中有以test為開頭的行,其中uid和gid都為500 ,然後又建立一個test1賬號,使其加入test組,查看/etc/passwd文件發現test和test1用戶的gid都為500。(也許你對/etc/passwd文件、增加一個用戶以及uid和gid等概念不熟悉,沒有關系,在以後的章節中會做介紹,在這裏只需要你明白即可)

2)打開磁盤的quota功能

默認linux並沒有對任何分區做quota的支持,所以需要我們手動打開磁盤的quota功能,你是否記得,在前面內容中分析/etc/fstab文件的第四列時講過這個quota選項(usrquota, grpquota)。沒錯,要想打開這個磁盤的quota支持就是需要修改這個第四列的。用vim編輯/etc/fstab 加入一行,如下圖:

技術分享圖片

vim命令將會在後續章節詳細介紹,前面介紹過如何進入編輯模式以及如何保存文件。如果你的linux系統已經有/home這一行,那麽直接修改第四列,加上usrquota,grpguota(中間沒有空格)。接下來需要重新掛載/home。

技術分享圖片

另外你也可以這樣實現重新掛載/home

技術分享圖片

如何查看是否啟用了quota呢?

技術分享圖片

只要查看/etc/mtab文件中/home所在那行是否有usrguota,grpquota即可。筆者的/dev/hdb1現在已經支持了quota

3)掃描磁盤的使用者使用狀況,並產生重要的aquota.group與aquota.user

這一步就需要用到quotacheck了,aquota.group與aqouta.user分別是組以及用戶磁盤配額需要的配置文件。如果沒有這兩個文件,則磁盤配額是不會生效的。

技術分享圖片

當首次使用quotacheck命令時,會提示“cannot stat old user quota file ……”其實這是在提示你在/home目錄下沒有aquota.user以及aquota.group兩個文件。沒有關系,因為以前並沒有配置過磁盤配額,當然沒有這兩個文件了。當執行完quotacheck命令後,會在/home目錄下生成這兩個文件的。

4)啟動quota配額

技術分享圖片

5)編輯用戶磁盤配額

先來設定test賬戶的配額,然後直接把test的配額拷貝給test1即可。這裏就需要用到edquota了。

技術分享圖片

講上面內容修改為

技術分享圖片

其中單位是Kb,所以soft 值大約為20Mb,hard值為30Mb,保存這個文件,保存的方式跟vim一個文件的方式一樣的。

技術分享圖片

將test的配額復制給test1。下面繼續設定寬限時間。

技術分享圖片

默認是7days 在這裏我們改為1days。下面查看一下test以及test1用戶的配額吧。

技術分享圖片

6)編輯組磁盤配額

技術分享圖片

設定組test的soft配額值為40M,hard值為50M。下面查看組test的配額。

技術分享圖片

7)設定開機啟動

前面已經講到啟動磁盤配額的命令是quotaon -aug ,所以要想開機啟動,只需將這條命令加入到 /etc/rc.d/rc.local文件即可。

技術分享圖片

linux磁盤管理之df和du命令