首頁 > 軟體

Linux基礎教學 - Linux 磁碟管理

2020-06-16 17:16:22

Linux磁碟管理好壞直接關係到整個系統的效能問題。

Linux磁碟管理常用三個命令為df、du和fdisk。

  • df:列出檔案系統的整體磁碟使用量
  • du:檢查磁碟空間使用量
  • fdisk:用於磁碟分割區

df

df命令引數功能:檢查檔案系統的磁碟空間佔用情況。可以利用該命令來獲取硬碟被佔用了多少空間,目前還剩下多少空間等資訊。

語法:

df [-ahikHTm][目錄或檔名]

選項與引數:

  • -a :列出所有的檔案系統,包括系統特有的 /proc 等檔案系統;
  • -k :以 KBytes 的容量顯示各檔案系統;
  • -m :以 MBytes 的容量顯示各檔案系統;
  • -h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示;
  • -H :以 M=1000K 取代 M=1024K 的進位方式;
  • -T :顯示檔案系統型別, 連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出;
  • -i :不用硬碟容量,而以 inode 的數量來顯示

範例 1

將系統內所有的檔案系統列出來!

[root@www ~]# df
Filesystem1K-blocks      UsedAvailableUse%Mounted on
/dev/hdc2         99206243823112558544441%//dev/hdc3         495631614137645591084%/home
/dev/hdc1          101086111268474112%/boot
tmpfs              37133203713320%/dev/shm

在 Linux 底下如果 df 沒有加任何選項,那麼預設會將系統內所有的 (不含特殊記憶體內的檔案系統與 swap) 都以 1 Kbytes 的容量來列出來!

範例 2

將容量結果以易讀的容量格式顯示出來

[root@www ~]# df -h
FilesystemSizeUsedAvailUse%Mounted on
/dev/hdc2             9.5G3.7G5.4G41%//dev/hdc3             4.8G139M4.4G4%/home
/dev/hdc1              99M11M83M12%/boot
tmpfs                 363M0363M0%/dev/shm

範例 3

將系統內的所有特殊檔案格式及名稱都列出來

[root@www ~]# df -aT
FilesystemType1K-blocks    UsedAvailableUse%Mounted on
/dev/hdc2     ext3   99206243823112558544441%/
proc          proc         000-/proc
sysfs        sysfs         000-/sys
devpts      devpts         000-/dev/pts
/dev/hdc3     ext3   495631614137645591084%/home
/dev/hdc1     ext3    101086111268474112%/boot
tmpfs        tmpfs    37133203713320%/dev/shm
none   binfmt_misc         000-/proc/sys/fs/binfmt_misc
sunrpc  rpc_pipefs         000-/var/lib/nfs/rpc_pipefs

範例 4

將 /etc 底下的可用的磁碟容量以易讀的容量格式顯示

[root@www ~]# df -h /etc
FilesystemSizeUsedAvailUse%Mounted on
/dev/hdc2             9.5G3.7G5.4G41%/

du

Linux du命令也是檢視使用空間的,但是與df命令不同的是Linux du命令是對檔案和目錄磁碟使用的空間的檢視,還是和df命令有一些區別的,這裡介紹Linux du命令。

語法:

du [-ahskm]檔案或目錄名稱

選項與引數:

  • -a :列出所有的檔案與目錄容量,因為預設僅統計目錄底下的檔案量而已。
  • -h :以人們較易讀的容量格式 (G/M) 顯示;
  • -s :列出總量而已,而不列出每個各別的目錄占用容量;
  • -S :不包括子目錄下的總計,與 -s 有點差別。
  • -k :以 KBytes 列出容量顯示;
  • -m :以 MBytes 列出容量顯示;

範例 1

列出目前目錄下的所有檔案容量

[root@www ~]# du
8./test4     <==每個目錄都會列出來8./test2
....中間省略....12./.gconfd   <==包括隱藏檔案的目錄220.<==這個目錄(.)所佔用的總量

直接輸入 du 沒有加任何選項時,則 du 會分析當前所在目錄的檔案與目錄所佔用的硬碟空間。

範例 2

將檔案的容量也列出來

[root@www ~]# du -a
12./install.log.syslog   <==有檔案的列表了8./.bash_logout
8./test4
8./test2
....中間省略....12./.gconfd
220.

範例 3

檢查根目錄底下每個目錄所佔用的容量

[root@www ~]# du -sm /*
7       /bin
6       /boot
.....中間省略....
0       /proc
.....中間省略....
1       /tmp
3859    /usr     <==系統初期最大就是他了啦!
77      /var

萬用字元 * 來代表每個目錄。

與 df 不一樣的是,du 這個命令其實會直接到檔案系統內去搜尋所有的檔案資料。


fdisk

fdisk 是 Linux 的磁碟分割區表操作工具。

語法:

fdisk [-l]裝置名稱

選項與引數:

  • -l :輸出後面接的裝置所有的分割區內容。若僅有 fdisk -l 時, 則系統將會把整個系統內能夠搜尋到的裝置的分割區均列出來。

範例 1

列出所有分割區資訊

[root@AY120919111755c246621 tmp]# fdisk -l

Disk/dev/xvda:21.5 GB,21474836480 bytes
255 heads,63 sectors/track,2610 cylinders
Units= cylinders of 16065*512=8225280 bytes
Sector size (logical/physical):512 bytes /512 bytes
I/O size (minimum/optimal):512 bytes /512 bytes
Disk identifier:0x00000000DeviceBootStartEndBlocksIdSystem/dev/xvda1   *125502048000083Linux/dev/xvda2            2550261149049682Linux swap /SolarisDisk/dev/xvdb:21.5 GB,21474836480 bytes
255 heads,63 sectors/track,2610 cylinders
Units= cylinders of 16065*512=8225280 bytes
Sector size (logical/physical):512 bytes /512 bytes
I/O size (minimum/optimal):512 bytes /512 bytes
Disk identifier:0x56f40944DeviceBootStartEndBlocksIdSystem/dev/xvdb2               1261020964793+83Linux

範例 2

找出你系統中的根目錄所在磁碟,並查閱該硬碟內的相關資訊

[root@www ~]# df /<==注意:重點在找出磁碟檔名而已Filesystem1K-blocks      UsedAvailableUse%Mounted on
/dev/hdc2              99206243823168558538841%/[root@www ~]# fdisk /dev/hdc  <==仔細看,不要加上數位喔!The number of cylinders forthis disk isset to 5005.Thereis nothing wrong with that, but thisis larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs(e.g., DOS FDISK, OS/2 FDISK)Command(m for help):<==等待你的輸入!

輸入 m 後,就會看到底下這些命令介紹

Command(m for help): m   <==輸入 m 後,就會看到底下這些命令介紹Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition            <==刪除一個partition
   l   list known partition types
   m   printthis menu
   n   add a new partition           <==新增一個partition
   o   create a new empty DOS partition table
   p   print the partition table     <==在螢幕上顯示分割表
   q   quit without saving changes   <==不儲存離開fdisk程式
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit  <==將剛剛的動作寫入分割表
   x   extra functionality (experts only)

離開 fdisk 時按下 q,那麼所有的動作都不會生效!相反的, 按下w就是動作生效的意思。

Command(m for help): p  <==這裡可以輸出目前磁碟的狀態Disk/dev/hdc:41.1 GB,41174138880 bytes        <==這個磁碟的檔名與容量255 heads,63 sectors/track,5005 cylinders      <==磁頭、磁區與磁柱大小Units= cylinders of 16065*512=8225280 bytes <==每個磁柱的大小DeviceBootStartEndBlocksIdSystem/dev/hdc1   *11310439183Linux/dev/hdc2              14128810241437+83Linux/dev/hdc3            128919255116702+83Linux/dev/hdc4            19265005247401005Extended/dev/hdc5            19262052102009682Linux swap /Solaris# 裝置檔名 啟動區否 開始磁柱    結束磁柱  1K大小容量 磁碟分割區槽內的系統Command(m for help): q

想要不儲存離開嗎?按下 q 就對了!不要隨便按 w 啊!

使用 p 可以列出目前這顆磁碟的分割表資訊,這個資訊的上半部在顯示整體磁碟的狀態。


磁碟格式化

磁碟分割完畢後自然就是要進行檔案系統的格式化,格式化的命令非常的簡單,使用 mkfs(make filesystem) 命令。

語法:

mkfs [-t 檔案系統格式]裝置檔名

選項與引數:

  • -t :可以接檔案系統格式,例如 ext3, ext2, vfat 等(系統有支援才會生效)

範例 1

檢視 mkfs 支援的檔案格式

[root@www ~]# mkfs[tab][tab]
mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.msdos   mkfs.vfat

按下兩個[tab],會發現 mkfs 支援的檔案格式如上所示。

範例 2

將分割區 /dev/hdc6(可指定你自己的分割區) 格式化為 ext3 檔案系統:

[root@www ~]# mkfs -t ext3 /dev/hdc6
mke2fs 1.39(29-May-2006)Filesystem label=<==這裡指的是分割槽的名稱(label)
OS type:LinuxBlock size=4096(log=2)<==block 的大小設定為4KFragment size=4096(log=2)251392 inodes,502023 blocks     <==由此設定決定的inode/block數量25101 blocks (5.00%) reserved for the super user
First data block=0Maximum filesystem blocks=51589939216 block groups
32768 blocks per group,32768 fragments per group15712 inodes per groupSuperblock backups stored on blocks:32768,98304,163840,229376,294912Writing inode tables:doneCreating journal (8192 blocks):done<==有紀錄檔記錄Writing superblocks and filesystem accounting information:doneThis filesystem will be automatically checked every 34 mounts or180 days, whichever comes first.Use tune2fs -c or-i to override.# 這樣就建立起來我們所需要的 Ext3 檔案系統了!簡單明瞭!

磁碟檢驗

fsck(file system check)用來檢查和維護不一致的檔案系統。

若系統掉電或磁碟發生問題,可利用fsck命令對檔案系統進行檢查。

語法:

fsck [-t 檔案系統][-ACay]裝置名稱

選項與引數:

  • -t : 給定檔案系統的型式,若在 /etc/fstab 中已有定義或 kernel 本身已支援的則不需加上此引數
  • -s : 依序一個一個地執行 fsck 的指令來檢查
  • -A : 對/etc/fstab 中所有列出來的 分割區(partition)做檢查
  • -C : 顯示完整的檢查進度
  • -d : 列印出 e2fsck 的 debug 結果
  • -p : 同時有 -A 條件時,同時有多個 fsck 的檢查一起執行
  • -R : 同時有 -A 條件時,省略 / 不檢查
  • -V : 詳細顯示模式
  • -a : 如果檢查有錯則自動修復
  • -r : 如果檢查有錯則由使用者回答是否修復
  • -y : 選項指定檢測每個檔案是自動輸入yes,在不確定那些是不正常的時候,可以執行 # fsck -y 全部檢查修復。

範例 1

檢視系統有多少檔案系統支援的 fsck 命令:

[root@www ~]# fsck[tab][tab]
fsck         fsck.cramfs  fsck.ext2    fsck.ext3    fsck.msdos   fsck.vfat

範例 2

強制檢測 /dev/hdc6 分割區:

[root@www ~]# fsck -C -f -t ext3 /dev/hdc6 
fsck 1.39(29-May-2006)
e2fsck 1.39(29-May-2006)Pass1:Checking inodes, blocks,and sizes
Pass2:Checking directory structure
Pass3:Checking directory connectivity
Pass4:Checking reference counts
Pass5:Checkinggroup summary information
vbird_logical:11/251968 files (9.1% non-contiguous),36926/1004046 blocks

如果沒有加上 -f 的選項,則由於這個檔案系統不曾出現問題,檢查的經過非常快速!若加上 -f 強制檢查,才會一項一項的顯示過程。


磁碟掛載與卸除

Linux 的磁碟掛載使用 mount 命令,解除安裝使用 umount 命令。

磁碟掛載語法:

mount [-t 檔案系統][-L Label名][-o 額外選項][-n]裝置檔名掛載點

範例 1

用預設的方式,將剛剛建立的 /dev/hdc6 掛載到 /mnt/hdc6 上面!

[root@www ~]# mkdir /mnt/hdc6
[root@www ~]# mount /dev/hdc6 /mnt/hdc6
[root@www ~]# df
Filesystem1K-blocks      UsedAvailableUse%Mounted on
.....中間省略...../dev/hdc6              19763124207218338363%/mnt/hdc6

磁碟解除安裝命令 umount 語法:

umount [-fn]裝置檔名或掛載點

選項與引數:

  • -f :強制卸除!可用在類似網路檔案系統 (NFS) 無法讀取到的情況下;
  • -n :不升級 /etc/mtab 情況下卸除。

解除安裝/dev/hdc6

[root@www ~]# umount /dev/hdc6     

Linux 作業系統的檔案資料除了檔案實際內容外,通常含有非常多的屬性,例如 Linux 作業系統的檔案許可權(rwx)與檔案屬性(擁有者、群組、時間引數等)。檔案系統通常會將這兩部分的資料分別存放在不同的區塊,許可權與屬性存放在 inode 中,至於實際資料則放置到 data block 區塊中。另外,還有一個超級區塊(superblock)會記錄整個檔案系統的整體資訊,包括 inode 與 block 的總量、使用量、剩餘量等。

inode:記錄檔案的屬性,一個檔案佔用一個 inode,同時記錄此檔案的資料所在的 block。

在 Linux 中,可以使用 stat 命令檢視某個檔案的 inode 資訊:

stat /etc/passwd
linux-peanut:~/Desktop # stat /etc/passwd
  File:`/etc/passwd'
  Size: 2269          Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d    Inode: 1149740     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-04-09 17:16:42.000000000 +0800
Modify: 2018-04-09 17:16:36.000000000 +0800
Change: 2018-04-09 17:16:36.000000000 +0800
 Birth: -

可見,檔案的絕大部分資訊都儲存在 inode 中。


IT145.com E-mail:sddin#qq.com