1. 程式人生 > 其它 >linux的基本操作(磁碟管理)

linux的基本操作(磁碟管理)

磁碟管理

檢視磁碟或者目錄的容量dfdu

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檔案即可