Linux文件系統監控命令
前面介紹了如何添加新磁碟,接下來,首先介紹對於已經分區格式化、掛載載的磁碟,如何獲取它們的信息?
Part.1 查看文件系統
1.1 查看文件系統狀態:dumpe2fs
顧名思義,起初dumpe2fs命令產生有關ext2文件系統低層信息的標準輸出。目前,dumpe2fs支持查看ext2/ext3/ext4文件系統信息。
下面的例子使用dumpe2fs命令查看sda1文件系統信息。
# dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: ①
Last mounted on: /boot
Filesystem UUID: 870b3ded-6eaf-4d60-ba02-9a905991f453
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize ②
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 128016 ③
Block count: 512000 ④
Reserved block count: 25600
Free blocks: 449166
Free inodes: 127977
First block: 1
Block size: 1024 ⑤
Fragment size: 1024
Reserved GDT blocks: 256
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2032
Inode blocks per group: 254
Flex block group size: 16
Filesystem created: Tue Nov 10 00:19:12 2015
Last mount time: Thu Aug 2 16:33:04 2018
Last write time: Thu Aug 2 16:33:04 2018
Mount count: 6
Maximum mount count: -1
Last checked: Tue Nov 10 00:19:12 2015
Check interval: 0 ()
Lifetime writes: 60 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: a77454df-e07a-4347-8a91-9efdc4cda57f
Journal backup: inode blocks
Journal features: (none)
Journal size: 8M
Journal length: 8192
Journal sequence: 0x0000001d
Journal start: 1
Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
Checksum 0x1317, unused inodes 2014 ⑥
Primary superblock at 1, Group descriptors at 2-3
Reserved GDT blocks at 4-259
Block bitmap at 260 (+259), Inode bitmap at 276 (+275)
Inode table at 292-545 (+291)
3820 free blocks, 2014 free inodes, 2 directories, 2014 unused inodes
Free blocks: 4373-8192
Free inodes: 19-2032
... ...
①文件系統標籤。這一欄是空的,因為mke2fs命令行沒有(使用命令行選項-L)指定標籤。
②ext4文件系統可以包括幾種功能,在這裡列出。
③文件系統中i-節點的數目。
④文件系統中的塊數目。
⑤塊大小,在這裡是1024位元組(1KB)。因為分區不大(512000塊1k大小的塊大約為500MB),所以mke2fs命令選擇較小的塊大小。
⑥最後,mkfs命令產生空閑塊和其他幾組塊的信息。
1.2 設置和查看文件系統標籤
e2lable命令可以查看和設置ext2/ext3/ext4文件系統卷標,e2lable語法如下:
e2label 設備文件 【新卷標】
如果不指定卷標,是查看該分區的卷標名稱是什麼。下面是我設置卷標和查看卷標的實例。
# e2label /dev/sda1 /boot
# e2label /dev/sda1
/boot
除了使用e2lable查看卷標,也可以使用dumpe2fs查看卷標。如下所示:
# dumpe2fs /dev/sda1 |head -1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: /boot
1.3 查看UUID
Linux系統除了可以使用,設備名或者是卷標掛載文件系統,還可以使用UUID掛載文件系統
1
什麼是UUID?
Universally Unique IDentifier, 是一種獲取全局唯一命名的標準。主要是為一個對象進行命名,並要求這個名字在時間和空間上都是唯一的,這在計算機領域是一個很重要的問題。目前已經存在很多成熟的解決方案,例如IP地址,MAC地址,DNS域名等。但這些方案都存在一個問題,那就是需要一個中央管理機構來批准和統一管理。這樣就需要,花費一定的費用和數量上的限制。
為了解決這個問題,UUID誕生了。它採用128位長度來表示一個名字,且同時考慮了時間和空間的唯一性,最重要的是它不需要申請註冊,任何人都可以使用本地計算機運行程序自動生成。
2
Linux分區為何使用UUID?
Linux系統對識別出的硬碟分區採用類似 /dev/sda1,/dev/sdb1這樣的格式進行動態命名。假設機器裝有兩塊串口硬碟,Linux會按照識別順序對第一個識別出的硬碟命名為/dev/sda,對第二塊識別出的硬碟命名為/dev/sdb。而問題是識別順序是隨機的,所以啟動機器之前不能確定/dev/sda到底是哪塊硬碟。
通常,我們會在/etc/fstab配置文件中設置自動掛載分區,如果系統有多塊硬碟,那麼下次啟動的時候,不能確定掛載目錄到底掛載了哪個硬碟的第一分區,如果這個掛載點對系統運行非常重要,那麼就有可能出現問題。
為解決上述問題,UUID被文件系統設計者採用,使其可以持久唯一標識一個硬碟分區。其實方式很簡單,就是在文件系統的超級塊中使用128位存放UUID。這個UUID是在使用文件系統格式化分區時計算生成的,例如Linux下的文件系統工具mkfs就在格式化分區的同時,生成UUID並把它記錄到超級塊的固定區域中。
02
查看UUID:blkid
Linux系統中,可以使用blkid命令對查詢設備上所採用文件系統類型進行查詢。blkid主要用來對系統的塊設備(包括交換分區)所使用的文件系統類型、LABEL、UUID等信息進行查詢。命令語法:
blkid 設備名
以下是我使用blkid命令查詢/dev/sda1分區信息範例:
# blkid /dev/sda1
/dev/sda1: LABEL="/boot" UUID="870b3ded-6eaf-4d60-ba02-9a905991f453" TYPE="ext4"
1.4 查看文件系統使用情況
要查看已經掛接的磁碟的使用情況,使用df 命令。以下是我使用df查看文件系統使用情況的範例:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
50G 2.6G 45G 6% /
tmpfs 935M 0 935M 0% /dev/shm
/dev/sda1 477M 38M 414M 9% /boot
/dev/mapper/VolGroup-lv_home
262G 60M 248G 1% /home
/dev/sr0 3.6G 3.6G 0 100% /media
10.1.1.3:/webroot 50G 2.6G 45G 6% /usr/local/apache/htdocs
輸出了6 列,分別表示:
設備名、總容量、已經使用的容量、未使用的容量、已使用百分比、掛載點。
1.5 查看文件和目錄使用空間:du
du命令也是查看使用空間的,但是與df命令不同的是Linux du命令是對文件和目錄磁碟使用的空間的查看,還是和df命令有一些區別的。du命令的語法:
du [選項] [文件]
常用選項:
·-b或-bytes 顯示目錄或文件大小時,以byte為單位。
·-c或--total 除了顯示個別目錄或文件的大小外,同時也顯示所有目錄或文件的總和。
·-k或--kilobytes 以KB(1024bytes)為單位輸出。
·-m或--megabytes 以MB為單位輸出。
·-s或--summarize 僅顯示總計,只列出最後加總的值。
·-h或--human-readable 以K,M,G為單位,提高信息的可讀性。
以下是我使用du查看/media目錄容量的範例:
# du -sh /media/
3.7G/media/
以上顯示為3.7G,/media目錄掛載了RHEL的系統安裝盤,說明整個光碟的容量為3.7G。
Part.2 交換空間管理
很多人把交換空間與Windows系統中的「虛擬內存(Virtual Memory)」 相提並論。在某種程度上這兩個的意義是一樣的,不過仔細論其運行的原理,兩者還是有許多不同之處。兩者相同的地方是都可以暫時作為內存使用;然而其啟用時機與用法卻大不相同。
Windows 的虛擬內存是開機時就必須要啟動,甚至沒有配置虛擬內存,可能無法順利啟動;另外Windows會同時使用物理內存與虛擬內存,即使實體內存還足夠,應用程序還是會使用虛擬內存
2.1 交換空間
Linux 中的交換空間(Swap space)在物理內存(RAM)被充滿時被使用。如果系統需要更多的內存資源,而物理內存已經充滿,內存中不活躍的頁就會被轉移到交換空間中。雖然交換空間可以為帶有少量內存的機器提供幫助,但是這種方法不應該被當做是對內存的取代。交換空間位於硬碟驅動器上,它比進入物理內存要慢。
這樣做的好處是,提高了系統執行的效率。因為物理內存的讀取速度遠高於磁碟上的交換內存,所以,Linux 會優先使用物理內存,萬不得以才會動用交換內存。通過這個技巧,可以提高Linux 整體的執行效率。
2.2 交換空間的種類
交換空間可以是一個專用的交換分區(推薦的方法),也可以是一個交換文件,或是兩者的結合。
1
分區類型的交換空間
分區類型的交換空間,是以分區為其配置單位。該分區有多大,啟用之後交換空間就會增加多大。
你可以在Linux系統中配置一個分區,並且設置其系統識別碼 (System ID) 為「82 - Linux Swap/Solaris」,如此一來,這個分區就可以被 Linux 拿來作為內存使用。
以分區呈現的交換空間,其優點為效率高,而其缺點則為彈性差。
由於Linux可以直接使用該分區的每一個扇區,因此,在讀取時效率會比文件類型的交換空間高。
然而要建立分區類型的交換空間,你必須要產生一個分區;如果該磁碟驅動器又是 Linux的啟動磁碟,那你必須要重新啟動 Linux系統,才能讓 Linux可以抓得到這個新的分區;如果你打算卸載這個交換空間空間,也必須要重新啟動系統,因此分區類型的置換內存空間在使用上比較麻煩且欠缺彈性。
2
文件類型的交換空間
文件類型的交換空間,則是以文件為配置單位,該文件有多大其交換空間的空間就有多大。文件類型的交換空間,優點是彈性佳,缺點則為效率較差。
由於配置的單位是文件,因此,如果你發現Linux的物理內存快要用光時,你可以馬上配置一個文件出來,作為交換空間使用;當你不再需要該交換空間,也可以在停用後直接刪除,以回收磁碟空間,所以文件類型的交換空間遠較分區類型的交換空間空間來的更具彈性。
然而,因為交換空間是以文件的類型儲存數據,當Linux 在讀取文件類型的交換空間時,還必須要通過文件系統方能使用真正的扇區、磁軌,故在執行上效率較差。
如果允許,我強烈建議你優先採用分區類型的交換空間;只在沒有多餘的磁碟空間可以產生新的分區時,才使用文件類型的交換空間。
2.3 建立交換空間
有時,你會有必要在安裝後添加更多的交換空間。例如,你把系統內存從512MB升級到1024MB,但是你只有512MB 的交換內存。如果你執行的是大量使用內存的操作或運行需要大量內存的程序,把交換區增加到1024MB 可能會對你有利。
你有兩種選擇:添加一個交換分區或添加一個交換文件。推薦添加一個交換分區,不過,若你沒有多少空閑空間可用,創建交換分區可能會不大容易。
1
添加分區類型的交換空間
要產生分區類型的交換空間,你必須使用fdisk之類的分區管理工具,先建立一個分區,然後將其分區識別符(Partition ID),設置為 「82 - Linux swap/Solaris」。完成後,這個分區就可以作為交換空間使用。
2
添加文件類型的交換空間
如果是要製作文件類型的交換空間,那麼你得先產生一個空的文件,其大小便是未來交換空間的大小。
要產生空的文件方法有很多種,在此我推薦使用dd這個命令來產生適當大小的文件空間。通常我們會在 dd 命令後,以 if 參數,指定從 /dev/zero 設備讀入數據;以of參數,指定輸出到哪個文件;以bs參數,指定每一條數據的大小;最後以count參數指定總共要讀多少次。
以下是我使用dd命令產生一個1024MB大小的交換空間範例:
# ls -lh //swapfile
ls: /swapfile: 沒有此一文件或目錄
# dd if=/dev/zero of=/tmp/swapfile bs=1G count=1
100+0 records in
100+0 records out
# ls -lh /swapfile
-rw-r--r-- 1 root root 1G Mar 2 14:18 /swapfile
2.4 創建交換空間文件系統
建立交換空間所需的空間後,接著必須在磁碟上創建交換空間的文件系統。由於交換空間中儲存的數據,與一般的文件數據不一樣,為了讓 Linux 系統能夠更有效率的讀取交換空間空間,Linux提供一個名為swapfs的特殊文件系統,用來儲存交換空間中的數據。
要創建交換空間的文件系統,你必須使用mkswap這個工具,其語法如下:
mkswap DEVICE
其中DEVICE是交換空間的設備名稱或者文件名稱。
以下是我使用mkswap創建交換內存文件系統的範例:
# fdisk -l /dev/sda | grep "/dev/sda2"
/dev/sda22116212810439182 Linux swap ?①
# mkswap /dev/sda2 ②
Setting up swapspace version 1, size = 106889 kB
# ls -lh /swapfile
-rw-r--r-- 1 root root 100M Mar 2 14:18 /tmp/swapfile ?③
# mkswap /swapfile ?④
Setting up swapspace version 1, size = 104853 kB
①這是我產生的一個分區,其系統識別碼 (System Id) 為「82 - Linux Swap」,等一下我就拿這個分區來作為分區類型的交換空間。
②現在,我使用mkswap在/dev/sda2 這個分區上建立swapfs文件系統,以便稍候可以作為交換空間。
③這是我剛剛使用dd產生的空的文件,大小為1024MB。
④同樣使用mkswap在 /swapfile中創建swapfs文件系統。
2.5 啟用交換空間
創建完交換內存空間的文件系統後,如果不啟用交換空間,是無法使用的。如果你要啟用交換內存空間,請使用swapon命令,其語法如下:
swapon DEVICE
其中DEVICE是交換內存空間的文件名稱。分區類型的交換內存,DEVICE 為分區的設備文件名稱;如果是文件類型的交換內存,DEVICE 則是其文件名稱。
以下是我使用swapon啟用交換內存空間的範例:
# free
totalusedfreesharedbufferscached
Mem:1027736346316681420015088227216
-/+ buffers/cache:104012923724
Swap:1052216 ①?01052216
# swapon /dev/sda2 ②
# free
totalusedfreesharedbufferscached
Mem:1027736346316681420015120227216
-/+ buffers/cache:103980923756
Swap:1156596 ③01156596
# swapon /swapfile ?④
# free
totalusedfreesharedbufferscached
Mem:1027736346444681292015144227216
-/+ buffers/cache:104084923652
Swap:1258988 ⑤01258988
#
① 我先用free命令查看目前的交換內存的狀況。按照這裡顯示的信息,目前我的Linux中共有 1,052,216 Bytes 的交換內存空間。
②接著使用swapon命令,將/dev/sda2啟用。
③再次查詢目前的交換內存的狀況,現在的交換內存共有1,156,596 Bytes,共增加 1,156,596 - 1,055,216 = 101,380 Bytes,增加的部分,實際上就是/dev/sda2提供的交換內存空間。
④再啟用/swapfile這個文件類型的交換內存空間。
⑤目前的交換內存空間共有1,258,988 Bytes,比起前一個步驟,增加了102,392Bytes,當然,增加的空間就是由 /swapfile 這個交換內存空間所產生的。
2.6 停用交換空間
如果你不再需要使用某一個交換內存空間,你可以停止使用它;或者,如果打算修改交換內存空間的配置,你也必須先停用後才能進行其它的配置。
你可以使用swapoff命令來停用交換內存。swapoff 的語法如下:
swapoff [[-a] | DEVICE ]
你可以使用swapoff停用所有的或某一個交換內存空間。-a參數代表停用所有的交換內存空間;如果只要停用某一個,請將DEVICE換成交換內存空間的相關的文件名稱。
以下是我使用swapoff停用交換內存空間的範例:
# free
totalusedfreesharedbufferscached
Mem:1027736346444681292015160227216
-/+ buffers/cache:104068923668
Swap:1258988①?01258988
# swapoff /dev/sda2
# free
totalusedfreesharedbufferscached
Mem:1027736346444681292015172227216
-/+ buffers/cache:104056923680
Swap:1154608 ②01154608
# swapoff /tmp/swapfile
# free
totalusedfreesharedbufferscached
Mem:1027736346444681292015188227216
-/+ buffers/cache:104040923696
Swap:1052216 ③01052216
①在停用交換內存空間之前,先看一下目前已啟用的交換內存有多大?
②在停用 /dev/sda2後,現在已啟用的交換內存大小,已經減為1,154,608 KB。
③停用/mnt/swapfile 交換內存空間後,總共啟用的交換內存空間總數為1,052,216KB。
swapon除了可以來啟用交換內存外,還能用來查看目前每一個交換內存空間的使用狀況。你只需執行swapon -s,它就會顯示目前系統中每一個交換內存空的大小、類型以及使用率等信息。
以下是我使用swapon -s的示範說明:
# swapon -s
FilenameTypeSize UsedPriority
/dev/sda1partition1052216 0-1
/dev/sda2partition104380 0-4
/swapfilefile102392 0-5
其中每列的含義,依次為文件名稱、交換內存空間的類型、交換內存空間大小、已使用的大小、優先順序。
2.7 設置交換空間
同一般的文件系統一樣,要在引導時啟用,交換內存數據也可以在/etc/fstab 裡面設置。
以我創建出來的 /dev/sda2和/swapfile兩個交換內存空間為例,如果希望每次開機時,都會自動啟用這兩個交換內存的話,那我就可以在/etc/fstab加入下面兩行:
/dev/sda2swapswapdefaults00
/swapfileswapswapdefaults00
TAG:雲運維聯盟 |