1. 程式人生 > >2018-1-27Linux系統管理(3)(4)磁盤和文件系統管理工具

2018-1-27Linux系統管理(3)(4)磁盤和文件系統管理工具

功能 字段 部分 根據 磁盤和文件系統管理 lan entos leg read

在之前的內容當中我們講到了磁盤的特性以及介紹了磁盤的分區,然後又介紹到文件系統的概念等。在現在的Linux中無論是機械式硬盤還是U盤以及固態硬盤,都統一命名為/dev/sd[a-z]#,而管理分區,無論是創建還是刪除分區,可以使用fdisk、parted、sfdidk,而我們要想在磁盤上存儲數據的話,就要創建文件系統。在Linux中,文件系統的類型例如:ext2、ext3、ext4、xfs、reiserfs、iso9600、swap等分區。之後我們由介紹了文件系統中組織結構當中的術語,分別為block groups、block、inode table、inode、inode bitmap、block bitmap、super block。那麽在這一章當中,我們開始介紹磁盤和文件系統的管理。

一、磁盤和文件系統管理

我們在CentOS 6中創建主分區,添加一塊磁盤設備,然後對其進行創建三個主分區一個擴展分區,擴展分區下有邏輯分區,步驟如下:

# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xeb83365f.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G

這樣重復三次,三個主分區就創建了,之後在創建擴展分區,在Partition number,每次創建的時候數字要加1,在擴展分區中就沒有這個操作了,完成點擊w,如果沒有警告的話,就查看一下文件看一下內核是否讀到該操作:

# cat /proc/partitions 
major minor  #blocks  name

   8        0   52428800 sda
   8        1     204800 sda1
   8        2    5242880 sda2
   8        3    1048576 sda3
   8        4          1 sda4
   8        5   11534336 sda5
   8        6        981 sda6
   8        7    1052548 sda7
   8        8    1060258 sda8
   8        9    1060258 sda9
   8       10    1060258 sda10
   8       16   20971520 sdb
   8       17    2104483 sdb1
   8       18    2104515 sdb2
   8       19    2104515 sdb3
   8       20          1 sdb4
   8       21    2104483 sdb5
   9      127    2102272 md127

那麽現在要如何更改分區類型,例如將/dev/sdb6下的Linux分區更改為swap分區。我們先來看一下該分區的ID號為多少。

# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/sdb: 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: 0xeb83365f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux
/dev/sdb2             263         524     2104515   83  Linux
/dev/sdb3             525         786     2104515   83  Linux
/dev/sdb4             787        2610    14651280    5  Extended
/dev/sdb5             787        1048     2104483+  83  Linux
/dev/sdb6            1049        1441     3156741   83  Linux

可以看出,/dev/sdb6的分區ID為83,那麽我們將要更改為swap分區,如果不知道如何更改,按m進行查看幫助。之後我們按t鍵並選擇序號為6,按L鍵查看分區列表,找到swap分區的ID號,輸入該ID號就可以完成並保存。

Command (m for help): t
Partition number (1-6): 6
Hex code (type L to list codes): L

Hex code (type L to list codes): 82
Changed system type of partition 6 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sdb: 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: 0xeb83365f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux
/dev/sdb2             263         524     2104515   83  Linux
/dev/sdb3             525         786     2104515   83  Linux
/dev/sdb4             787        2610    14651280    5  Extended
/dev/sdb5             787        1048     2104483+  83  Linux
/dev/sdb6            1049        1441     3156741   82  Linux swap / Solaris

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

如果提示設備或資源忙,就使用partx讓內核重讀該分區表。

# partx -a /dev/sdb

二、文件系統的管理命令

那麽現在我們開始管理磁盤上的文件系統,此前講過文件系統管理工具,而文件系統(內核級)通常由兩部分組成,第一種是讓磁盤工作起來的某個模塊,我們稱之為文件系統的驅動;第二種是文件系統的管理工具,我們要想真正的管理某個分區,或者利用該文件系統的驅動,那麽用戶就得需要一些管理工具用來管理該分區。

   內核級文件系統的組成部分:  
      文件系統驅動:由內核系統提供;
      文件系統管理工具:由用戶空間應用程序提供;

要想使用該文件系統驅動的話,有可能先要在用戶空間當中手動安裝該程序來進行提供。
那麽如何創建文件系統,對於文件系統來說,它們的創建方式也會有所不同,不過我們都可以用mkfs來進行創建該分區。

   ext系列文件系統管理工具:
     mkfs.ext2, mkfs.ext3, mkfs.ext4
     
     mkfs -t ext2 = mkfs.ext2
    
     ext系列文件系統專用管理工具:mke2fs
         mke2fs [OPTIONS] device
             -t {ext2|ext3|ext4}:指明要創建的文件系統類型;
                mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
             -b {1024|2048|4096}:指明文件系統的塊大小;
             -L LABEL:指明卷標;
             -j:創建有日誌功能的文件系統ext3;
                mke2fs -k = mke2fs -t ext3 = mkfs.ext3
             -i #:bytes-per-inode, 指明inode與字節的比率;每多少字節創建一個inode;
             -N #:直接指明要給此文件系統創建的inode數量;
             -m #:指定預留空間,百分比;
            
             -O[^]FEATURE:以指定特性創建目標文件系統
            
         e2abel命令:卷標的查看與設定
             查看:e2label device
             設定:e2label device LABEL
            
         tune2fs命令:查看或修改ext系列文件系統的某些屬性;
             adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems;
             註意:塊大小創建後不可修改;
            
             tune2fs [OPTIONS] device
                -l:查看超級塊的內容;
                 
                修改指定文件系統的屬性:
                    -j:ext2 --> ext3;
                    -L LABEL:修改卷標;
                    -m #:指定預留的空間,百分比;
                    
                    -O[^] FEATURE:以指定的特性創建目標文件系統;
                    
                    -o[^]mount_options:開啟或關閉某種默認掛載選項;
                        acl
                        ^acl
                        
         dumpe2fs命令:顯示ext系列文件系統的屬性信息;
            dumpe2fs [-h] device

下一個命令為fsck,為文件系統檢測命令,該命令是用於實現文件系統的檢測工具,就像Windows一樣,如果有意外的情況(如斷電),則Windows有可能會對硬盤來進行檢測,當然也可以手動停止停止。

   用於文件實現文件西永的檢測工具:
     因進程意外中止或系統崩潰等等原因導致寫入操作非正常時,可能會造成文件損壞;此時,應該檢測並修復文件系統;建議:離線進行;
    
     ext系列文件系統的專用工具:
         e2fsck [OPTIONS] device
             -y:對所有問題自動回答為yes;
             -f:即使文件系統處理clean狀態,仍要強制檢測;
        
         fsck: check and repair a Linux filesystem
             -t fstype:指明文件系統類型;
                fsck -t ext4 = fsck.ext4
             -a:無須交互而自動修復所有錯誤;
             -r:交互式修復;

那麽以上就是ext系列文件系統的管理工具,無論是創建、修復、檢測等命令,都對其一一介紹,需要的是熟練操作並且輕車熟路的去駕馭。
我們現在就創建一個ext4文件系統,用剛才的/dev/sdb6。

   # mkfs.ext4 /dev/sdb6

之後我們可以查看該設備的文件系統類型,用blkid命令。

   # blkid /dev/sdb6 
   /dev/sdb6: UUID="e8879f1b-05ea-4512-abe6-c6aa8685ce80" TYPE="ext4"

需要註意的是,CentOS 6不支持xfs文件系統,想使用的話需安裝。至於如何安裝,我們主要使用的yum命令來進行安裝,該目錄在/etc/yum.repos.d/,創建一個.repo的倉庫文件。

# cd /etc/yum.repos.d/
# cat aliyun.repo 
[aliyun-base]
name=aliyun-base
baseurl=https://mirrors.aliyun.com/centos/6/os/x86_64/
gpgkey=https://mirrors.aliyun.com/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6

[aliyun-epel]
name=aliyun-epel
baseurl=https://mirrors.aliyun.com/epel/6Server/x86_64/
gpgcheck=0

我們用nano來進行編輯創建一個文件,將上述的內容復制到該文件中,之後我們只用yum repolist來檢測一下:

   # yum repolist

之後我們安裝xfs文件系統,該包名為xfsprogs。

   # yum -y install xfsprogs

安裝完成之後我們使用mkfs.雙擊tab鍵來進行查看。

   # mkfs.
   mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.minix   mkfs.xfs 

   創建:mkfs.xfs /dev/sd[a-z]#
   檢測:fsck.xfs

那麽下面我們介紹的是blkid命令,就是查看該文件系統的相關屬性,那麽最常用的方法如下:

   blkid device
   blkid -L LABEL:根據LABEL定位設備;
   blkid -U UUID:根據UUID定位設備;

接下來我們說一下swap文件系統,簡單來說swap分區的作用就是,當內存占滿時,使用LRU最近最少使用算法,將某一個空閑進程放置在該交換分區中。那麽如何管理swap文件系統。

   swap文件系統:
     Linux上的交換分區必須使用獨立的文件西永;
         且文件系統的System ID必須為82;
        
     創建swap設備:mkswap命令
         mkswap [OPTIONS] device
             -L LABEL:指明卷標;
             -f:強制;

我們開始創建Windows系統,主要針對的是fat32(vfat),NFTS不能識別或者說不能支持(僅限於CentOS)。

   Windows無法識別Linux的文件系統;因此,存儲設備需要兩種系統之間交叉使用時,應該使用 Windows和Linux同時支持的文件系統;fat32(vfat);
     # mkfs.vfat device

對於Linux,或者說對於文件系統分區來講,要想被訪問到,必須要關聯至當前根下某一個位置,而這種行為我們稱之為掛載,與之對該目錄進行關聯。

   文件系統的使用:
     首先要"掛載":mount命令和umount命令;
    
     根據文件系統以外的其它文件系統要想能夠被訪問,都必須通過"關聯"至根文件系統上的某個目錄來實現,此關聯操作過程稱為"掛載";而此目錄即稱為"掛載";
     
     掛載點:mount_point,用於作為另一個文件系統的訪問入口;

要想在Linux中實現掛載操作,我們使用mount命令來進行掛載,該命令格式為:

   mount [-fnrsvw] [-t vfstype] [-o options] device dir

該命令選項為:

   命令選項:
     -r:readonly, 只讀掛載;
     -w:read and write, 讀寫掛載;
     -n:默認情況下,設備掛載或卸載的操作會同步更新至/etc/mtab文件中;-n選項用於禁止此特性;
    
     -t type:指明要掛載設備上的文件系統類型;多數情況下可省略,此時mount會通過blkid來判斷要掛載的設備文件的系統類型;
    
     -L LABEL:掛載時以卷標的方式指明設備;
         mount -L LABEL dir
        
     -U UUID:掛載時以UUID的方式指明設備;
        mount -U UUID dir

還有一個選項為-o,我們稱之為掛載選項,那麽該選項是指該設備掛載時指定文件系統的特性。

   -o options:掛載選項
     sync/rsync:同步/異步操作;
     atime/mtime:文件或目錄在被訪問時是否更新其訪問時間戳;
     diratime/nodiratime:目錄再被訪問時是否更新其訪問時間戳;
     remount:重新掛載;
     acl:支持使用acl功能;
         # mount -o remount,acl device dir
         # mount -o acl device dir
         # tune2fs -o acl device
    
     ro:只讀
     rw:讀寫
     dev/nodev:設備上是都允許創建設備文件;
     exec/noexec:是否允許運行設備上的程序文件;(可以防止未經授權的文件自動啟動)
     auto/noauto:
     user/nouser:是否普通用戶掛載此文件系統;
     suid/nosuid:是否允許程序文件上的suid和sgid特殊權限生效;
    
     default:Use default options:rw, suid, dev, exec, auto, nouser, and async.

不過,需要註意以下幾點就能可以進行掛載。

   (1) 事先掛載
   (2) 應該使用未被或不會被其它進程使用到的目錄;
   (3) 掛載點下原有的文件將會被隱藏;

那麽我們現在去掛載一個磁盤,在CentOS 7中,以剛才的/dev/sda6作為掛載設備,將它掛在到/media/disk中,不過,由於disk事先不存在,所以我們要創建該目錄。

   # mount /dev/sda6 /media/disk/

掛載成功之後,我們進入該目錄,創建一個文件或目錄;名為tests。之後,我們將/etc/fstab文件復制到當前目錄中來。

# mkdir tests
# cp /etc/fstab ./
# ll
total 4
-rw-r--r-- 1 root root 595 Jan 30 10:08 fstab
drwxr-xr-x 2 root root   6 Jan 30 10:08 tests

所以,無論那個目錄位置作為該設備的訪問入口,那麽該設備入口的文件也會隨之顯示在該目錄中。
我們還有一個使用技巧,或者叫做秘籍,我們不止可以把設備掛載到某個目錄上,還可以將目錄關聯至某個目錄上,這個可以稱之為綁定。

   一個使用技巧:
     可以實現將目錄綁定至另一個目錄上,作為其臨時的訪問入口;
        mount --bind 源目錄 目標目錄

我們還可以查看在當前系統上所有已經掛載的設備:

   # mount
   # cat /etc/mtab
   # cat /proc/mounts

如果我們掛載光盤的話,需要指定設備為cdrom或者為sr0,用來掛載光盤:

   掛載光盤:
     mount -r /dev/cdrom mount_point

     光盤設備文件:/dev/cdrom, /dev/dvd

掛載U盤也是一樣的,但需要識別該設備文件:

   掛載U盤:
     事先識別U盤的設備文件;

如果要卸載該設備,卸載設備的命令為umount命令。

   umount命令:
     umount device | dir

不過我們需要註意的是:如果你在當前的掛載點進行卸載的話,則會警告你設備或資源忙,卸載不成功。

註意:正在被進程訪問到的掛載點無法進行卸載;
# umount /dev/sda6 
umount: /media/disk: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

所以說要先退出掛載點目錄在進行卸載,然後在進入該目錄,看其文件是否存在。

# cd
# umount /dev/sda6 
# cd /media/disk/
# ll
total 0

但是,如果非得強制卸載的話,我們需要查看是被那個進程所被占用。

   查看被那個或那些進程所占用:
     # lsof MOUNT_POINT
     # fuser -v MOUNT_POINT
    
     終止所有正在訪問某個掛載點的進程:
     # fuser -km MOUNT_POINT

三、交換分區

我們此前也講過交換分區的概念,那麽現在如何管理交換分區,例如啟用與禁用。

   交換分區的啟用和禁用:
     創建交換分區的命令:mkswap
    
     啟用:swapon
          swapon [OPTIONS] [DEVICE]
              -a:定義在/etc/fstab文件中的所有swap設備;
            
     禁用:swapoff
          swapoff DEVICE

四、fatab文件

在系統中,啟動開機時有些設備就會自動啟動掛載到該目錄下,而我們創建的設備即使掛載到某個目錄當中,等到再次開機時,還要重新掛載一遍,這是因為在系統啟動時,系統會讀取fatab配置文件來進行自動掛載設備。

   設定除根文件系統以外的其它文件系統能夠開機時自動掛載;/etc/fstab文件
     每行定義一個要掛載的文件及相關屬性:
        共6個字段:
            (1) 要掛載的設備:
                設備文件
                LABEL
                UUID
                偽文件系統:如sysfs, proc, tmpfs等;
                
            (2) 掛載點
                swap類型的設備掛載點為swap;
            
            (3) 文件系統類型;
            
            (4) 掛載選項
                default:默認使用掛載選項;
                如果同時指明多個掛載選項,彼此間以逗號分隔即可;
                default, acl, noatime, noexec
                
            (5) 存儲頻率
                0、從不備份;
                1、每天備份;
                2、每隔一天備份;
                
            (6) 自檢次序
                0、從不備份
                1、首先自檢,通常只能是根文件西永可用1;
                2、次級自檢;
                ...
                
        mount -a:可自動掛載定義在此文件中的所有支持自動掛載的設備;

示例,我們將CentOS 7的/dev/sda6進行開機時自動掛載。
首先,我們現檢查該設備的UUID。

   # blkid /dev/sda6 
   /dev/sda6: UUID="94b5bc24-1d14-4084-a9c7-d1a3172f03f6" TYPE="xfs"

復制UUID,之後打開/etc/fstab文件,添加格式如下:

   # vim /etc/fstab
   UUID=94b5bc24-1d14-4084-a9c7-d1a3172f03f6 /media/disk    xfs     defaults        0 0

保存並退出,使用mount -a,命令選項來檢查並啟動掛載該設備文件。

   # mount -a

如果沒有提示錯誤,則掛載成功。

五、兩個命令

這兩個命令為df和du命令。df命令是查看磁盤的使用情況,前提是掛載之後才能查看該分區,那麽du是查看單個文件或目錄占用該分區的容量大小。

   df命令:
       df [OPTIONS]... [FILE]...
         -i:僅顯示本地文件的相關信息;
         -h:--human-readable
         -i:顯示inode的使用狀態而非blocks
        
   du命令:
       du [OPTIONS]... [FILE]...
         -s:sumary
         -h:--human-readable


2018-1-27Linux系統管理(3)(4)磁盤和文件系統管理工具