在以前的內容當中咱們講到了磁盤的特性以及介紹了磁盤的分區,而後又介紹到文件系統的概念等。在如今的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
咱們在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
那麼如今咱們開始管理磁盤上的文件系統,此前講過文件系統管理工具,而文件系統(內核級)一般由兩部分組成,第一種是讓磁盤工做起來的某個模塊,咱們稱之爲文件系統的驅動;第二種是文件系統的管理工具,咱們要想真正的管理某個分區,或者利用該文件系統的驅動,那麼用戶就得須要一些管理工具用來管理該分區。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
咱們此前也講過交換分區的概念,那麼如今如何管理交換分區,例如啓用與禁用。
交換分區的啓用和禁用: 建立交換分區的命令:mkswap 啓用:swapon swapon [OPTIONS] [DEVICE] -a:定義在/etc/fstab文件中的全部swap設備; 禁用:swapoff swapoff DEVICE
在系統中,啓動開機時有些設備就會自動啓動掛載到該目錄下,而咱們建立的設備即便掛載到某個目錄當中,等到再次開機時,還要從新掛載一遍,這是由於在系統啓動時,系統會讀取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
若是沒有提示錯誤,則掛載成功。
這兩個命令爲df和du命令。df命令是查看磁盤的使用狀況,前提是掛載以後才能查看該分區,那麼du是查看單個文件或目錄佔用該分區的容量大小。
df命令: df [OPTIONS]... [FILE]... -i:僅顯示本地文件的相關信息; -h:--human-readable -i:顯示inode的使用狀態而非blocks du命令: du [OPTIONS]... [FILE]... -s:sumary -h:--human-readable