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

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

1、磁盤和文件系統管理

  咱們在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,若是沒有警告的話,就查看一下文件看一下內核是否讀到該操做:vim

# 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號爲多少。centos

# 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讓內核重讀該分區表。async

# partx -a /dev/sdb

2、文件系統的管理命令

  那麼如今咱們開始管理磁盤上的文件系統,此前講過文件系統管理工具,而文件系統(內核級)一般由兩部分組成,第一種是讓磁盤工做起來的某個模塊,咱們稱之爲文件系統的驅動;第二種是文件系統的管理工具,咱們要想真正的管理某個分區,或者利用該文件系統的驅動,那麼用戶就得須要一些管理工具用來管理該分區。ide

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

  要想使用該文件系統驅動的話,有可能先要在用戶空間當中手動安裝該程序來進行提供。
  那麼如何建立文件系統,對於文件系統來講,它們的建立方式也會有所不一樣,不過咱們均可以用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有可能會對硬盤來進行檢測,固然也能夠手動中止中止。ui

   用於文件實現文件西永的檢測工具:
     因進程意外停止或系統崩潰等等緣由致使寫入操做非正常時,可能會形成文件損壞;此時,應該檢測並修復文件系統;建議:離線進行;
    
     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。
url

   # 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

3、交換分區

  咱們此前也講過交換分區的概念,那麼如今如何管理交換分區,例如啓用與禁用。

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

4、fatab文件

  在系統中,啓動開機時有些設備就會自動啓動掛載到該目錄下,而咱們建立的設備即便掛載到某個目錄當中,等到再次開機時,還要從新掛載一遍,這是由於在系統啓動時,系統會讀取fatab配置文件來進行自動掛載設備。

   設定除根文件系統之外的其它文件系統可以開機時自動掛載;/etc/fstab文件
     每行定義一個要掛載的文件及相關屬性:
        共6個字段:
            (1) 要掛載的設備:
                設備文件
                LABEL
                UUID
                僞文件系統:如sysfs, proc, tmpfs等;
                
            (2) 掛載點
                swap類型的設備掛載點爲swap;
            
            (3) 文件系統類型;
            
            (4) 掛載選項
                default:默認使用掛載選項;
                若是同時指明多個掛載選項,彼此間以逗號分隔便可;
                default, acl, noatime, noexec
                
            (5) 存儲頻率
                0、從不備份;
                一、天天備份;
                二、每隔一天備份;
                
            (6) 自檢次序
                0、從不備份
                一、首先自檢,一般只能是根文件西永可用1;
                二、次級自檢;
                ...
                
        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

  若是沒有提示錯誤,則掛載成功。

5、兩個命令

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

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