1. 程式人生 > >linux中關於文件系統的簡要介紹和一般操作

linux中關於文件系統的簡要介紹和一般操作

e2fs 並且 查詢 特殊權限 防止 nodes point 改變 標準

創建文件系統——分區格式化
格式化:
低級格式化:
劃分磁道
高級格式化:
創建文件系統,按照某種特定的標準,將整個分區劃分為大小相同的若幹小的邏輯編址單元,每個這樣的單元,稱為塊(Block);

劃分塊的標準:
在Linux的文件系統中,主要的塊劃分標準就是:每個塊包括2^1或2^2或2^3個扇區;即塊大小可以是:1024Byte,2048Byte或者4096Byte;

註意:
1.被劃分出來的塊,每一個塊只能存放一個文件的內容,一個文件可以存儲在多個塊上;
2.如果在某個分區中,要創建大量的小文件,就將塊大小設置的小一些;反之,如果在某個文件中,要創建的都是大文件,就將塊設置的大一些;
3.如果分區的空間較大,可以將塊設置的大一些;

FHS——文件系統層級標準
/bin /boot /etc /dev ...

對應數據的管理:
平面分類管理:
遍歷數據;
空間分類管理(層次化)
邏輯編址:創建文件系統實際上就是給分區進行存儲空間的邏輯編址;
特點:僅需要經過有限次且有效的查找即可定位到目標文件;

在一個分區中創建文件系統的步驟:
1.首先,文件系統會將分區劃分成大小相等的若幹塊;
元數據塊:
其中主要存放文件的屬性:
文件大小、文件權限、文件所有權、文件的時間戳、數據塊指針(直接、間接)

存放每個文件的元數據的固定的存儲空間,稱為index node,簡稱inode;(查詢inode的使用 用df -i 命令)
在linux的文件系統中,每個inode大小一般是128byte;每個inode都有其對應的inode編號;

數據塊
存放文件中所包含的流式數據的內容;

特殊文件:
只占據元數據塊中的inode,而不占據數據塊;
設備文件:
Block Special
Character Special

此類文件是將inode中的數據塊指針換成了設備號;

符號鏈接文件:
Symbolic Link

此類文件時將inode的數據塊指針換成了另一個文件的訪問路徑;

隨著磁盤空間越來越大,劃分出來的塊的數量越來越多,管理難度越來越大;通過劃分塊組來解決此問題:
塊組:
每個塊組中有獨立的元數據塊和數據塊;
存放數據的時候,以塊組內的數據優先選擇,如果塊組內的數據塊數量不夠,可以通過文件系統的存儲策略來申請多個塊組協同存儲;

超級塊:
主要定義了在整個分區中有多少個塊組,及每個塊組的邊界;
為了防止超級塊發生故障導致整個文件系統崩潰,文件系統會自動對超級塊進行備份;

為了防止數據不一致,在文件系統中引入日誌塊的概念:
日誌塊:對於數據的寫入操作做日誌記錄的塊;

數據不一致通常是由不潔關機、不潔斷電導致;

一個完整的Linux文件系統:
超級塊,inode,inode bitmap,block bitmap,data block,journal block

想要查找/var/log/messages文件的內容,是怎樣的查找過程?

目錄:內容是文件名;

每個文件名是文件的特有的標識,每個文件名都對應一個inode;

Linux支持的文件系統:
位於內核空間中的文件系統驅動:
/usr/lib/modules/KERNEL-VERSION/kernel/fs/
文件系統可以是內核的一部分,也可以是內核的模塊;

位於用戶空間中的文件系統管理程序:
管理命令;

linux支持的文件系統:
1.Linux專屬文件系統:
ext系列:ext、ext2、ext3、ext4
ext4特性:
單個分區最大50TB;
單個文件最大64EB;
可以在根分區上設置;
可以在啟動分區上設置;
2.xfs:最大分區500TB, ...
3.reiserfs:
4.btrfs:技術預覽版
5.ISO9660:光盤文件系統
6.FAT:vfat
7.NTFS:默認不支持,可以通過調整內核參數以獲得支持;
8.網絡文件系統:NFS、CIFS
9.集群文件系統:gfs2、ocfs2
10.分布式文件系統:
內核級:ceph
用戶空間(應用級):mogilefs、moosefs、glusterfs
11.Unix的文件系統:ufs、FFS、JFS、zfs
12.偽文件系統:proc、sys、tmpfs、hugepagefs;
並非管理磁盤數據的文件系統,而是管理內存數據的文件系統;

對於不同的發行版本的LInux,都有其默認使用的文件系統:
RHEL或CentOS系列:
5:ext3
6:ext4
7:xfs

管理文件系統:
創建文件系統:
使用文件系統(掛載文件系統):
停止使用文件系統(卸載文件系統):
文件系統的檢測和修復:

創建文件系統的用戶空間工具:
mkfs
mkfs - build a Linux filesystem
mkfs [options] [-t type] [fs-options] device [size]

RHEL或CentOS系發行版中,可以使用mkfs.ext4, mkfs.btrfs, ...等工具來代替mkfs創建文件系統;

示例:
]# mkfs -t ext4 /dev/sdb1
]# mkfs.ext4 /dev/sdb2

註意:
1.不要使用磁盤設備名稱作或擴展分區設備名稱作為mkfs命令的參數;
如果使用磁盤設備名稱作為mkfs命令的參數,則所有分區都將被刪除;
如果使用擴展分區設備作為mkfs命令的參數,則所有的邏輯分區都將被刪除;

2.只有主分區和邏輯分區才能使用mkfs命令創建文件系統;

3.如果要創建的目標文件系統是ext系列文件系統,那麽可以使用mke2fs命令;
mke2fs:
mke2fs - create an ext2/ext3/ext4 filesystem
常用選項:
-b block-size:在創建文件系統時,指定每個塊的大小;默認值是4096,單位是字節;調整時,只能寫1024,2048及4096;
-i bytes-per-inode:在創建文件系統時,指定inode與字節的比率;即:多少個字節創建一個inode,默認值是16384;
-j:創建有日誌功能的文件系統,即:ext3;
-L new-volume-label:在創建文件系統時,指定卷標;
-m reserved-blocks-percentage:在創建文件系統時,指定為管理員保留的磁盤空間的百分比;默認值是5;
-n:並非真正創建文件系統,而是顯示在創建文件系統時所做的操作;
-N number-of-inodes:在創建文件系統時,直接指明在此文件系統中創建的inode的數量;
-O [^]feature[,...]:在創建文件系統時,關閉或開啟文件系統特性;
-t fs-type:在創建文件系統時,指定文件系統類型;

修改ext系列文件系統的卷標:
e2label命令:
e2label - Change the label on an ext2/ext3/ext4 filesystem
e2label device [ new-label ]

註意:如果不加new-label參數,則是查看指定設備的卷標;如果添加了new-label參數,則直接將設備的卷標設置為new-label,而不考慮原來是否有卷標或者原卷標是什麽;

修改ext系列文件系統的屬性,可以使用tune2fs命令:
tune2fs:
tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
在ext2/ext3/ext4文件系統上調整那些可以被調整的參數;
常用選項:
-l:顯示超級塊的內容;
-j:將ext2文件系統修改調整為ext3文件系統;
-m reserved-blocks-percentage:調整文件系統中預留空間的百分比;
-r reserved-blocks-count:調整文件系統中預留的磁盤空間的塊數;
-L volume-name:修改卷標;
-O [^]feature[,...]:修改文件系統特性是否開啟;

文件系統的檢測和修復工具:
fsck:
fsck - check and repair a Linux filesystem
fsck [-ar] [-t fstype] [filesystem...]
常用選項:
-t fstype:指定要檢測的文件系統的文件系統類型;
-a:無需交互,自動修復檢測到的所有問題;
-r:交互式式修復檢測到的問題;

ext系列文件系統專用的檢測修復工具:
e2fsck
e2fsck - check a Linux ext2/ext3/ext4 file system
e2fsck [-y] [-f] device
常用選項:
-y:在交互式過程中所有的問題都以"yes"來回答;
-f:強制檢測並修復;即使文件系統處於clean狀態也修復;

blkid:
blkid - locate/print block device attributes
常用選項:
-L label:根據指定的卷標進行塊設備查找定位;
-U UUID:根據指定的UUID進行塊設備的查找定位;

findfs
findfs - find a filesystem by label or UUID
findfs [LABEL=<label>] [UUID=<uuid>]

swap文件系統:
前提:分區的類型必須是swap類型,即:分區的系統ID必須是82;
修改方法:在fdisk的交互模式中,使用t命令將指定的分區類型修改為82即可;

創建swap文件系統:
mkswap命令:
mkswap - set up a Linux swap area
mkswap [options] device
常用選項:
-f, --force:強制執行;
-L LABEL:設置交換分區的卷標;
-U UUID:指定交換分區的UUID,建議讓系統自動生成;

示例:
~]# mkswap /dev/sdb3

利用一個大文件創建交換分區:
示例:
~]# dd if=/dev/zero of=/tmp/swapfile bs=1024 count=1024000
~]# mkswap /tmp/swapfile

使用文件系統——掛載
掛載:
對於Linux系統來說,文件系統只能有唯一的一個原初訪問入口,此訪問入口被稱為"根文件系統";其他所有的文件系統,都必須通過某個特定方式關聯至根文件系統或者根文件系統的子目錄中,而此關聯過程被稱為"掛載";用於關聯根文件系統和其他文件系統的目錄,就被稱為"掛載點";

掛載點:mount point,通常是一個目錄,該目錄在成為掛載點之後,就是其他文件系統的訪問入口;如:/boot
要求:
1.作為掛載點的目錄必須事先存在;
2.作為掛載點的目錄應該是沒有被使用或不能被其他進程占用的目錄,換言之,必須是空閑的目錄;
3.作為掛載點的目錄,一旦掛載其他文件系統,則失去原文件系統中的特性;簡單說,如果一個目錄中有文件名,一旦掛載了其他文件系統,則原來的文件名則不可見,這樣的目錄中的新的內容是新文件系統中的文件名;這個過程會一直持續到新文件系統被卸載;

完成掛載操作,使用mount命令;
mount命令:
mount - mount a filesystem
格式:
mount [-lhV]
mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
mount [-fnrsvw] [-o option[,option]...] device|dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir

常用選項:
-r, --read-only:以只讀方式掛載目標文件系統;通常用於光盤掛載;
-w, --rw, --read-write:以可讀可寫的方式掛載目標文件系統;通常是默認的
-n, --no-mtab:
默認情況下,所有掛載塊設備的操作都會被自動記錄在/etc/mtab文件中,如果使用了-n, --no-mtab選項,則表示即便掛載成功,也不會將掛載信息記錄在/etc/mtab文件中
-t, --types vfstype:在掛載文件系統時指明目標文件系統的類型;如果省略該選項,mount命令會通過blkid命令來判斷要掛載的目標文件系統的類型;
-L, --label label:通過指定的文件系統的卷標來掛載目標文件系統;
-U, --uuid uuid:通過指定的文件系統的UUID掛載目標文件系統;
-a, --all:根據/etc/fstab文件中指定的文件系統進行自動掛載;
-o, --options opts:在掛載目標文件系統時,可以調整掛載參數選項;
FILESYSTEM INDEPENDENT MOUNT OPTIONS:
sync/async:同步/異步掛載選項;
atime/noatime:文件被訪問時,是否更新訪問時間戳;
diratime/nodiratime:目標被訪問時,是否更新訪問時間戳;
ro/rw:是以只讀/可讀可寫方式掛載文件系統;相當於-r/-w選項的功能;
dev/nodev:在此文件系統中是否允許創建設備文件;
exec/noexec:在此文件系統中是否允許運行程序文件,包括各種二進制文件和各種腳本;
auto/noauto:在掛載此文件系統時是否能夠使用-a選項進行掛載;
user/nouser:是否允許普通用戶掛載此文件系統;
suid/nosuid:在此文件系統中是否允許程序文件上的SUID和SGID特殊權限生效;
relatime/norelatime:在此文件系統中是否參考inode訪問時間來修改其修改時間戳和改變時間戳;
remount:對目標文件系統,無需卸載,就可以應用新的掛載選項;
acl:只在ext系列文件系統或xfs文件系統中使用,可以使用文件系統的facl功能;
defaults:默認選項,其中包括:rw, suid, dev, exec, auto, nouser, and async.
loop:使用環回設備,將鏡像文件當做文件系統掛載至指定的掛載點;
-B, --bind:將某個已經掛載的文件系統綁定至另一個掛載點;
示例:# mount -B|--bind mount_point1 mount_point2
示例:
# mount /dev/sdb1 /mnt/sdb1
# mount -o remount,ro /mnt/sdb1

卸載已經掛載的文件系統:
umount命令:
umount - unmount file systems
umount -a
卸載當前已經掛載的文件系統中的所有可卸載的文件系統;
umount {dir|device}...
通過指定掛載點或設備文件名稱,卸載指定設備;

掛載光盤:
在虛擬機中,需要保證光盤鏡像文件被放入虛擬機的光驅,並且保證虛擬機的光驅處於"已連接"的狀態;需要實現創建掛載點(/mnt/cdrom);

# mount -r /dev/sr0 /mnt/cdrom

掛載交換分區:
swapon:

卸載交換分區:
swapoff:

swapon, swapoff - enable/disable devices and files for paging and swapping
-a, --all:自動掛載/etc/fstab文件中被正確定義的所有的交換分區;

/etc/fstab文件的格式:
共6個字段,默認使用空白字符(制表符)作為字段分隔符;六個字段的含義分別為:
1.要掛載的設備或文件系統名稱,也可以是卷標或UUID;
如果使用卷標必須使用:LABEL="label"
如果使用UUID必須使用:UUID="uuid"

2.掛載點:
swap設備或文件無需掛載點,在此字段寫swap即可;

3.文件系統類型:

4.默認的文件系統掛載選項:想要指定多個選項時,使用逗號分隔的列表;
defaults,ro,sync

5.轉儲頻率:
使用dump命令自動備份分區數據的頻率;
0:表示不備份
1:每天備份一次
2:每兩天備份一次,即:每隔一天備份一次;
...

6.自檢次序:
0:不自檢;
1:優先自檢,通常僅設置在根文件系統上;
2:次級自檢;
...
9:最低優先級自檢;

/etc/fstab文件的作用:
在系統啟動過程中,會自動掛載該文件中所有被正確列出的文件系統;

linux中關於文件系統的簡要介紹和一般操作