文件系統是操做系統用於明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操做系統中負責管理和存儲文件信息的軟件結構稱爲文件管理系統,簡稱文件系統。node
從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。具體地說,它負責爲用戶創建文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日誌,壓縮,加密等。linux
Linux支持的文件系統能夠在設備上進行查看。以下:web
# /lib/modules/`uname–r`/kernel/fs
[root@LeeMumu ~]# uname -r 3.10.0-957.el7.x86_64 [root@LeeMumu ~]# ll /lib/modules/3.10.0-957.el7.x86_64/kernel/fs/ total 20 -rw-r--r--. 1 root root 5980 Nov 8 2018 binfmt_misc.ko.xz drwxr-xr-x. 2 root root 25 Jun 22 20:10 btrfs drwxr-xr-x. 2 root root 30 Jun 22 20:10 cachefiles drwxr-xr-x. 2 root root 24 Jun 22 20:10 ceph drwxr-xr-x. 2 root root 24 Jun 22 20:10 cifs ... ... drwxr-xr-x. 2 root root 23 Jun 22 20:10 udf drwxr-xr-x. 2 root root 23 Jun 22 20:10 xfs
連接文件實現訪問一個文件的不一樣路徑。windows
# 硬連接:指向同一個inode的多個文件路徑; # 特性: #(1) 目錄不支持硬連接; #(2) 硬連接不能跨文件系統; #(3) 建立硬連接會增長inode引用計數; # 建立: # ln src link_file
# 符號連接:指向一個文件路徑的另外一個文件路徑; # 特性: #(1) 符號連接與文件是兩人個各自獨立的文件,各有本身的inode;對原文件建立符號連接不會增長引用計數 #(2) 支持對目錄建立符號連接,能夠跨文件系統 #(3) 刪除符號連接文件不影響原文件;但刪除原文件,符號指定的路徑即不存在,此時會變成無效連接 # 注意:符號連接文件的大小是其指定的文件的路徑字符串的字節數 # 建立: # ln -s src link_file -v:verbose
# ext2(Extended file system) :適用於那些分區容量不是太大,更新也不頻繁的狀況,例如/boot 分區 # ext3:是ext2 的改進版本,其支持日誌功能,可以幫助系統從非正常關機致使的異常中恢復。它一般被用做通用的文件系統 # ext4:是ext文件系統的最新版。提供了不少新的特性 # 包括納秒級時間戳、建立和使用巨型文件(16TB)、最大1EB的文件系統,以及速度的提高 # xfs:SGI,支持最大8EB的文件系統
日誌型文件系統: ext3, ext4, xfs, ... 非日誌型文件系統: ext2, vfat
內核中的模塊:ext4, xfs, vfat 用戶空間的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
# cat /proc/filesystems
[root@LeeMumu ~]# cat /proc/filesystems nodev sysfs ... ... nodev selinuxfs xfs
文件系統中的目錄也是文件,是有元數據和數據組成的。centos
# 元數據:inode, inode table # 數據:data blocks # 下級文件或目錄的文件名與其inode對應關係
# 刪除文件:將此文件指向的全部data block標記爲未使用狀態;將此文件的inode標記爲未使用 # 複製和移動文件 # 複製:新建文件, # 移動文件: # 在同一文件系統:改變的僅是其路徑; # 在不一樣文件系統:複製數據至目標文件,並刪除原文件; # 符號連接:權限(lrwxrwxrwx) # 硬連接:指向同一個inode
# mkfs # mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...
# fsck # fsck.ext2, fsck.ext3, ...
# dumpe2fs # tune2fs
建立文件系統的工具 # tune2fs
經常使用工具:安全
# mkfs.ext2 # mkfs.ext3 # mkfs.ext4
經常使用命令:bash
# mkfs.FS_TYPE/dev/DEVICE ext4 xfs btrfs vfat # mkfs-t FS_TYPE /dev/DEVICE -L 'LABEL'設定卷標 # 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 -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3 -i #:bytes-per-inode,指明inode與字節的比率;即每多少字節建立一個Indode -N #:直接指明要給此文件系統建立的inode的數量 -m #:指定預留的空間,百分比,不須要加%號 -O [^]FEATURE:以指定的特性建立目標文件系統
卷標的查看與設定的命令:e2label數據結構
# 查看:e2label device # 設定:e2label device LABEL
查看或修改ext系列文件系統的某些屬性的命令:tune2fs。(adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems)
注意:塊大小建立後不可修改。app
# tune2fs [OPTIONS] device # -l:查看超級塊的內容 # 修改指定文件系統的屬性: # -j:ext2 --> ext3; # -L LABEL:修改卷標; # -m #:調整預留空間百分比; # -O [^]FEATHER:開啓或關閉某種特性; # -o [^]mount_options:開啓或關閉某種默認掛載選項 # acl # ^acl
顯示ext系列文件系統的屬性信息的命令:dumpe2fs
# dumpe2fs [-h] device
文件系統修復注意事項:
# e2fsck : check a Linux ext2/ext3/ext4 file system # e2fsck [OPTIONS] device # -y:對全部問題自動回答爲yes # -f:即便文件系統處於clean狀態,也要強制進行檢測 # fsck:check and repair a Linux file system # -t fstype:指明文件系統類型 fsck -t ext4 = fsck.ext4 # -a:無須交互而自動修復全部錯誤 # -r:交互式修復
CentOS 6 使用xfs文件系統以下命令:
事先準備: # cd /etc/yum.repos.d/ # wget http://172.16.0.1/centos6.7.repo # mv CentOS-Base.repo CentOS-Base.repo.bak
安裝:# yum -y install xfsprogs 建立:# mkfs.xfs 檢測:# fsck.xfs
blkid命令: # blkid device # blkid -L LABEL:根據LABEL定位設備 # blkid -U UUID:根據UUID定位設備
# Linux上的交換分區必須使用獨立的文件系統,且文件系統的System ID必須爲82 # 建立swap設備:mkswap命令 # mkswap [OPTIONS] device -L LABEL:指明卷標 -f:強制
Windows沒法識別Linux的文件系統,所以,存儲設備須要兩種系統之間交叉使用時,應該使用windows和Linux同時支持的文件系統:fat32(vfat)。
# mkfs.vfat device
要使用文件系統,首先須要對文件系統進行掛載。
經常使用命令: # mount # umount
根文件系統這外的其它文件系統要想可以被訪問,都必須經過「關聯」至根文件系統上的某個目錄來實現,此關聯操做即爲「掛載」;此目錄即爲「掛載點」。
掛載點: # mount_point,用於做爲另外一個文件系統的訪問入口 注意事項: # (1) 事先存在 # (2) 應該使用未被或不會被其它進程使用到的目錄 # (3) 掛載點下原有的文件將會被隱藏
查看內核追蹤到的已掛載的全部設備。
# mount # cat /etc/mtab # cat /proc/mounts
命令格式: # mount [-nrw] [-t vfstype] [-o options] device dir
命令選項: # -r:readonly,只讀掛載; # -w:read and write, 讀寫掛載; # -n:默認狀況下,設備掛載或卸載的操做會同步更新至/etc/mtab文件中;-n用於禁止此特性 # -t vfstype:指明要掛載的設備上的文件系統的類型 # 多數狀況下可省略,此時mount會經過blkid來判斷要掛載的設備的文件系統類型 # -a:自動掛載全部支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能) # -L LABEL:掛載時以卷標的方式指明設備; # mount -L LABEL dir # -U UUID:掛載時以UUID的方式指明設備; # mount -U UUID dir
-o options:掛載選項 # sync/async:同步/異步操做 # atime/noatime:文件或目錄在被訪問時是否更新其訪問時間戳 # diratime/nodiratime:目錄在被訪問時是否更新其訪問時間戳 # remount:從新掛載 # acl:支持使用facl功能 # mount -o acl device dir # tune2fs -o acl device # ro:只讀 # rw:讀寫 # dev/nodev:此設備上是否容許建立設備文件 # exec/noexec:是否容許運行此設備上的程序文件 # auto/noauto:是否支持自動掛載,是否支持-a選項 # user/nouser:是否容許普通用戶掛載此文件系統 # suid/nosuid:是否容許程序文件上的suid和sgid特殊權限生效 # 默認配置defaults: # Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
使用技巧: # 能夠實現將目錄綁定至另外一個目錄上,做爲其臨時訪問入口 # mount --bind 源目錄 目標目錄
光盤設備文件: # IDE: /dev/hdc # SATA: /dev/sr0 # 光盤的符號連接文件: # /dev/cdrom # /dev/cdrw # /dev/dvd # /dev/dvdrw 掛載光盤: # mount -r /dev/cdrom mount_point 光盤設備文件:/dev/cdrom, /dev/dvd 卸載或彈出磁盤命令 # eject 建立ISO文件 # cp/dev/cdrom/root/centos7.iso # mkisofs -r -o /root/etc.iso /etc 刻錄光盤 # wodim–v –eject centos.iso
掛載U盤: 事先識別U盤的設備文件 查看USB設備是否識別 # lsusb 被內核探測爲SCSI設備 # /dev/sdaX、/dev/sdbX、或相似的設備文件 在圖形環境中自動掛載 # 圖標在[計算機]窗口中建立 # 掛載在/run/media/<user>/<label> 手動掛載 # mount /dev/sdb1 /mnt
掛載本地的迴環設備: # mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
命令格式: # umount device|dir
查看掛載狀況 # findmntMOUNT_POINT|device
注意:正在被進程訪問到的掛載點沒法被卸載 # 查看被哪一個或哪些進程所戰用: # lsof MOUNT_POINT # fuser -v MOUNT_POINT # 終止全部正在訪問某掛載點的進程: # fuser -km MOUNT_POINT
交換分區是系統RAM的補充。
基本設置包括: # 建立交換分區或者文件 # 使用 mkswap 寫入特殊簽名 # 在 /etc/fstab 文件中添加適當的條目 # 使用 swapon-a 激活交換空間
建立交換分區的命令:mkswap 啓用:swapon # swapon [OPTION] [DEVICE] # -a:定義在/etc/fstab文件中的全部swap設備 # -p PRIORITY:指定優先級 # /etc/fstab:pri=value 禁用:swapoff # swapoff DEVICE
設定除根文件系統之外的其它文件系統可以開機時自動掛載:/etc/fstab文件。
[root@leemumu ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Mon Jun 24 00:50:10 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=a66f32bb-5a9b-459d-91d8-93d8a37f5afa /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
fstab文件: 設備 掛載點 文件系統類型 掛載選項 轉儲頻率 自檢次序
# 每行定義一個要掛載的文件系統及相關屬性 6個字段: (1) 要掛載的設備: 設備文件 LABEL:LABEL=" " UUID:UUID=" " 僞文件系統:如sysfs, proc, tmpfs等 # 儘可能使用 UUID 表明設備文件,不會在設備重啓時進行改變,部分設備名稱會隨着系統重啓進行改變 (2) 掛載點 swap類型的設備的掛載點爲swap (3) 文件系統類型; (4) 掛載選項 defaults:使用默認掛載選項 若是要同時指明多個掛載選項,彼此間以事情分隔 例如:defaults,acl,noatime,noexec (5) 轉儲頻率 0:從不備份 1:天天備份 2:每隔一天備份 (6) 自檢次序 0:不自檢 1:首先自檢,一般只能是根文件系統可用1 2:次級自檢 ... # mount -a:可自動掛載定義在此文件中的所支持自動掛載的設備
寫入此命令可實現開機自動掛載: # echo "/dev/sdb /mnt/mydata ext4 defaults 0 0" >> /etc/fstab
blkid命令:
# blkid device # 查詢設備的 UUID 和 LABEL # blkid -L LABEL # 根據LABEL定位設備 # blkid -U UUID # 根據UUID定位設備
[root@LeeMumu ~]# blkid /dev/sdc1 /dev/sdc1: UUID="124c758d-e223-400f-8bea-8c62ea4b9aa9" TYPE="swap" [root@LeeMumu ~]# blkid -U 124c758d-e223-400f-8bea-8c62ea4b9aa9 /dev/sdc1
# 配置文件系統體系 # 被mount、fsck和其它程序使用 # 系統重啓時保留文件系統體系 # 能夠在設備欄使用文件系統卷標 # 使用 mount -a 可自動掛載定義在此文件中的所支持自動掛載的設
查看某目錄整體空間佔用狀態: # du [OPTION]... DIR # -h: human-readable # -s: summary --max-depth
文件系統空間佔用等信息的查看工具: # df [OPTION]... [FILE]... # -H 以1000爲單位 # -T 文件系統類型 # -P: 以Posix兼容的格式輸出 # -l:僅顯示本地文件的相關信息; # -h:human-readable # -i:顯示inode的使用狀態而非blocks(inodesinstead of blocks)
建立一個10G的分區,並格式化爲ext4文件系統。
一、先在VM裏添加一塊10G的硬盤。 二、而後對其建立文件系統,指定相關參數。 三、修改fstab文件,實現開機自動掛載此硬盤。
[root@LeeMumu ~]# fdisk -l # 查看添加的設備爲 /dev/sdb Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000b7260 Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 251658239 124779520 8e Linux LVM Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes [root@LeeMumu ~]# mke2fs -t ext4 -b 2048 -L MYDATA -m 2 /dev/sdb # 建立文件系統 mke2fs 1.42.9 (28-Dec-2013) /dev/sdb is entire device, not just one partition! Proceed anyway? (y,n) y Filesystem label=MYDATA OS type: Linux Block size=2048 (log=1) Fragment size=2048 (log=1) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 5242880 blocks 104857 blocks (2.00%) reserved for the super user First data block=0 Maximum filesystem blocks=273678336 320 block groups 16384 blocks per group, 16384 fragments per group 2048 inodes per group Superblock backups stored on blocks: 16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 2048000, 3981312 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done [root@LeeMumu ~]# mount -o noexec -o noatime -o auto /dev/sdb /mnt/mydata # 進行掛載 [root@LeeMumu ~]# mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel) ... ... /dev/sdb on /mnt/mydata type ext4 (rw,noexec,noatime,seclabel,data=ordered) [root@LeeMumu ~]# cat /proc/partitions major minor #blocks name 8 0 125829120 sda 8 1 1048576 sda1 8 2 124779520 sda2 11 0 10491904 sr0 8 16 10485760 sdb 253 0 52428800 dm-0 253 1 2097152 dm-1 253 2 70246400 dm-2 [root@LeeMumu ~]# echo "/dev/sdb /mnt/mydata ext4 defaults 0 0" >> /etc/fstab # 設置開機啓動 [root@LeeMumu ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Sat Jun 22 20:09:20 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=6a3f1b5d-5a4b-47d7-ab6d-ce610bcaf413 /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/sdb /mnt/mydata ext4 defaults 0 0 [root@LeeMumu ~]# mount -a # 掛載文件中的設備
建立一個大小爲1G的swap分區,並啓用。
一、添加2G的硬盤。 二、進行分區,選擇文件類型爲 swap 三、建立文件系統 四、啓用 五、設置自動掛載
[root@LeeMumu ~]# fdisk -l Disk /dev/sdc: 2147 MB, 2147483648 bytes, 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes [root@LeeMumu ~]# fdisk /dev/sdc # 建立分區 Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0xefb86f75. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-4194303, default 2048): 2048 Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): +1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 82 Changed type of partition 'Linux' to 'Linux swap / Solaris' Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@LeeMumu ~]# fdisk -l Disk /dev/sdc: 2147 MB, 2147483648 bytes, 4194304 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0xefb86f75 Device Boot Start End Blocks Id System /dev/sdc1 2048 2099199 1048576 82 Linux swap / Solaris [root@LeeMumu ~]# mkswap /dev/sdc1 # 建立文件系統 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=124c758d-e223-400f-8bea-8c62ea4b9aa9 [root@LeeMumu ~]# [root@LeeMumu ~]# swapon /dev/sdc1 # 激活設備 [root@LeeMumu ~]# [root@LeeMumu ~]# swap -a -bash: swap: command not found [root@LeeMumu ~]# lsblk # 列出塊設備信息 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 120G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 119G 0 part ├─centos-root 253:0 0 50G 0 lvm / ├─centos-swap 253:1 0 2G 0 lvm [SWAP] └─centos-home 253:2 0 67G 0 lvm /home sdb 8:16 0 10G 0 disk /mnt/mydata sdc 8:32 0 2G 0 disk └─sdc1 8:33 0 1G 0 part [SWAP] sr0 11:0 1 10G 0 rom [root@LeeMumu ~]# swapon -s # 激活Linux系統中交換空間 Filename Type Size Used Priority /dev/dm-1 partition 2097148 0 -2 /dev/sdc1 partition 1048572 0 -3 [root@LeeMumu ~]# free # 顯示內存的使用狀況 total used free shared buff/cache available Mem: 995924 146788 693604 7788 155532 675888 Swap: 3145720 0 3145720 [root@LeeMumu ~]# echo "UUID=124c758d-e223-400f-8bea-8c62ea4b9aa9 swap swap defaults 0 0" >> /etc/fstab # 設置自動掛載 [root@LeeMumu ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Sat Jun 22 20:09:20 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=6a3f1b5d-5a4b-47d7-ab6d-ce610bcaf413 /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/sdb /mnt/mydata ext4 defaults 0 0 UUID=124c758d-e223-400f-8bea-8c62ea4b9aa9 swap swap defaults 0 0 [root@LeeMumu ~]# mount -a # 激活 fstab
建立一個20G的文件系統,塊大小爲2048,文件系統ext4,卷標爲TEST,要求此分區開機後自動掛載至/testing目錄,且默認有acl掛載選項。
# 建立20G分區 # 格式化 mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE # 編輯 /etc/fstab 文件 LABEL='TEST' /testing ext4 defaults,acl 0 0
建立一個5G的文件系統,卷標HUGE,要求此分區開機自動掛載至/mogdata目錄,文件系統類型爲ext3。
寫一個腳本,完成以下功能:(1) 列出當前系統識別到的全部磁盤設備;(2) 如磁盤數量爲1,則顯示其空間使用信息;不然,則顯示最後一個磁盤上的空間使用信息。
if [ $disks -eq 1 ]; then fdisk -l /dev/[hs]da else fdisk -l $(fdisk -l /dev/[sh]d[a-z] | grep -o "^Disk /dev/[sh]d[a-]" | tail -1 | cut -d' ' -f2) fi