Linux 系統中的每一個分區都是一個文件系統。
文件系統就是指對存在物理空間上的文件的一種管理軟件(個人認為)
Linux 2.4 內核以後,開始支持大量的文件系統;
日志文件系統; ext3 ReiserFS XFSJFS
Linux2.4內核以後支持的文件系統有; JFS , ReiserFs, ext, ext2, ext3, , ISO9660, XFS, Minx, MSDOS, UMSDOS, VFAT, NTFS, HPFS, NFS, SMB, SysV, PROC 等等
Ext2/ext3 采用block+ innode 方式來存放文件
Ext2/ext3 有一個空間被稱為超級塊
(superblock) 存放文件系統的原數據
包括;卷標名, block數, inode 數 等等
Inode是存放文件元數據,包括文件權限,屬性,更改時間等數據
Inode 就是一個索引節點, 這個inode紀錄文件的屬性,位置等信息。
每個inode都有一個號碼,稱為索引節點號(inode號)
Linux 文件系統將索引節點號和文件名同時保存在目錄中。所以目錄只是將文件的名稱和他的索引點號結合在一起的一張表,目中的每個文件名和索引點號稱為一個連接。
一個文件只有一個對應的inode號,但是一個inode可以有多個文件名與其對應。因此,在磁盤上的同一個文件可以通過不同的路徑去訪問他。
書上說ext2不是日志文件系統
從ext2 變成ext3不需要格式化,用tune2fs 就可以
從ext3 變成ext2 可以不用作任何的改動
Ext3 特性;
1. 高效性; 非法關機後恢復ext3文件系統只要10秒左右
2. 數據完整性;避免非法關機對數據完整性的破壞
3. 文件系統的速度; 對磁盤驅動器讀寫進行了優化
4. 數據的轉化; ext2-ext3, ext3-ext2
5. 多種日志模式;對所有數據進行日志紀錄模式,只對metadata進行日志紀錄,而不對數據進行日志紀錄
Data=journal 所有數據日志紀錄模式
Data=writeback 對metadata日志紀錄模式
提示metadata是定義文件系統中的數據,即數據中的數據
Root可以根據實際的工作情況來定義,在系統的工作速度和數據完整性來選擇
將一個新的分區格式化成ext3文件系統
# mke2fs -j /dev/hda8
將ext2 轉換成ext3文件系統
# tune2fs -j /dev/hda9
提示; 將ext2文件系統轉換成ext3時,不需要將分區卸載。直接轉換就可以。不要忘記把/etc/fstab 裡的ext2改成ext3
用e2fsck 修復ext3文件系統
1. # umount /dev/hda8 先卸載該分區.
2.#e2fsck -fy /dev/hda8 修復該分區
Reiserfs文件系統
1997 年 hans reiser 把reserfs文件系統在網上公布
Reserfs 比ext2fs要快的的多
當前reserfs 只能在intel結構體系上使用
Reiserfs 文件系統一直被用於在高端的unix系統上
Reiserfs 特點;
1. 先進的日志機制
Reiserfs 日志機制在每個實際數據要修改之前把相應的日志寫入到磁盤空間,這樣提高數據的安全性
2. 高效的磁盤利用率
Reiserfs對一些小的文件不分配inode。而是將這些小文件打包,存放在同一個磁盤塊中。而其他的文件系統是每個文件都要占用一個block塊。這意味著如果有1000個小文件,那麼就要占用1000個block。這樣非常浪費磁盤空間。
3. 獨特的搜索方式
Reserfs基於平衡樹(balanced tree)搜索,這種方式的速度要比ext2快的多。平衡樹是一種高效的算法。
4. 支持海量硬盤
Reserfs可以管理上百G的數據。Rerserfs最大支持文件系統的尺寸是16TB。這非常適合企業級應用。
5. 優異的性能
Reserfs 文件系統啟動X -windows的速度比ext2快2倍
文件的附加屬性
# chattr +〔AadijS〕 filename 設置文件的附加屬性
# lsattr filename 查看文件的附加屬性
A; 當文件被改變時,文件的更改時間不變
a; 只能向該文件追加內容,不可以更改原內容
i; 文件不可以刪除, 重命名, 改變內容
j; 在ext3文件系統中,次文件一定被寫入日志
S; 當文件被改動,此改動會同步寫入文件系統
將原ext2轉換升級成ext3文件系統
# tune2fs -j /dev/hda1 這是直接轉換
# mke2fs -j /dev/hda2 這是格式化轉換
常見的文件系統
Minix ; linux第一個支持的文件系統,比較古老,現在每人用了
ISO9660; 標准的cdrom 文件系統
NFS ; 是sun公司推出的網絡文件系統,准許多台計算機共享一個文件系統
提示; redhat linux默認是不支持ntfs 文件系統的。我們可以自己編輯kernel來讓系統支持ntfs,但是可能會對數據造成損壞
常用創建文件系統工具
Mkfs 可以用於創建各種文件系統,由-t參數來指定
Mke2fs 創建ext2/ext3文件系統
# Mk2fs -j /dev/hda2
文件系統的使用
設備;就是一個具體的文件系統,可以用設備名或卷標名來表示
掛載點:必須是一個目錄。當一個目錄下有文件時,則在該文件系統被掛載後,原文件暫時無法訪問。直到當前掛載的文件被卸載以後,才能繼續訪問
Mount命令參數
掛載時使用mount命令
基本格式; mount 〔-參數〕 〔設備名〕 〔掛載點〕
Mount -t 指定文件系統的類型
Umount 卸載文件系統
Mount -o loop disk1.iso 掛載.iso 文件
Mount -o 選項指定掛載文件系統時的選項。有些時候也可以/etc/fstab來指定。常用的有
ro ; 以只讀的方式掛載
rw ; 以讀寫的方式掛載
nouser ; 使一般的用戶無法掛載設備
user ; 可以讓一般的用戶掛載設備
配置/etc/fstab
/etc/fstab 這個文件是文件系統的掛載信息
當mount一個文件系統時如果給出的參數不全,系統會從/etc/fstab文件中讀取參數來補全
當系統啟動時,系統會根據這個/etc/fstab這個文件中的配置信息來自動加載文件系統
這個文件同時,還可以被fsck, dump, quotaon, swapon等程序所使用
fstab 文件的格式
fs_spec fs_file fs_type fs_options fs_dump fs_pass
/dev/hda1 /boot ext2 defaults 1 1
fs_spec ; 這個字段表示要加載的文件系統所在的設備或遠程文件系統
fs_file; 表示文件系統的掛載點
fs_type; 文件系統的類型
說明;對於swap設別,該字段為none; 對於加載目錄名中包含空格的情況,用40來表示空格
Fs_options; 因為在給指定的設備加載文件系統時,需要使用特定的參數,多個參數是由逗號分開的。對於大多數的系統都是default就可以滿足需要了
加載文件系統可以指定的參數;
ro ; 以只讀的方式加載
sync; 不對該設備的寫操作進行緩沖處理,這可以防止在非法關機時破壞文件系統和數據的完整性。但是這樣卻降低了計算機的工作效率
user ; 准許普通用戶可以掛載這個文件系統
quota ; 強制的在該文件系統上進行磁盤配額
noauto ; 不在使用mount -a 命令 (在系統啟動時) 加載文件系統
fs_dump ; 該選項被“dump”命令使用來檢查一個文件系統應該以多快的頻率進行轉存,如果不需要轉存就設置為0
fs_pass ; 這個字段表示fsck命令用來決定在啟動時需要被掃描文件系統的順序,根文件系統“/” 對應該字段的值為1,其他文件系統應該為2。如果該文件系統不需要在啟動時掃描,則設置為0
檢查當前系統中掛載的文件系統
# mount 使用mount命令
# cat /etc/fstab 使用/etc/fstab 文件
# cat /proc/mounts 使用內存鏡像文件
卷標的含義
由於設備的文件名可能在硬盤結構發生變化時而改變,因此redhat linux 對ext2文件系統使用卷標來掛載和卸載
卷標紀錄在ext2/ext3文件系統的超級塊中(superblock)
e2label 命令可以查詢和更改ext2文件系統的卷標名
# cat /etc/fstab
LABEL=/ / ext3 default 1 1
/dev/hda7 /usr ext3 default 1 1
第二的意思就是說,把/dev/hda7這個分區掛載到/usr這個目錄上
第一行沒有指明分區,意思是把LABEL(卷標)為/ 的分區mount到/ 分區上。 這樣寫的好處就是當你的硬盤從主板上的IDE1(hda)移動到IDE2(hdc)上的時候,系統仍然可以自動的掛載正確的分區
手動添加新分區,自定義卷標
# e2label /dev/hdax /new
# mkdir /new
最後在/etc/fstab 文件中加入
LABEL=/new /new ext3 default 1 1
這樣就ok了, 下次重啟後系統會自動掛載這個/new分區
查詢 ext2/ext3 的卷標名
# e2label /dev/hda2 查看
Boot 系統返回信息
更改ext2/ext3的卷標名
# e2label /dev/hda2 data 更改
# e2label /dev/hda2 查看
Data 系統返回信息
用卷標名來掛載文件系統
# mount —L data /data
# mount LABEL=DATA /data
 
當你想創建,刪除分區或重新劃分分區大小,分區所在的設備就不能是正在使用的(分區不能被掛載,並且交換空間也不能被啟動)。達到這個目錄的最簡單的方法就是,進入救援模式中引導系統。由於已經加載的文件系統的信息會自動的寫道/etc/mstab中,所以用戶只需要給出設備或掛載點中的一個參數即可
如果驅動器不包括任何這在使用的分區,你可以使用umount來卸載分區,使用swapoff 命令來關閉硬盤驅動器上的交換空間
文件系統的維護命令
Fsck /filesystem check ; 用於檢查和修復文件系統
e2fsck; 檢查和修復ext2/ext3文件系統
tun2fs; 更改ext2文件系統的屬性
resize2fs; 更改ext2文件系統的大小
parted; 更改多種文件系統的大小
linux有個parted 工具可以調整分區的大小,但是他是有限制的。如果向增大一個分區那麼該分區後面必須有沒有使用的空間,而且這個分區沒有被mount
# parted /dev/had resize 3 644 1300
意思是把分區3 調整從柱面644 到柱面1300結束,重新啟動後就會生效了。
Linux系統將每隔20次啟動系統或30天對文件系統進行一次檢查。這些屬性可以用tune2fs 來設定(時間間隔的周期以秒指定)
# tune2fs -i 0 /dev/hdb5
設置檢查文件系統的時間間隔秒數(-i)為0,0就是禁止根據時間的周期進行檢查。
文件系統訪問控制列表
可以為多個用戶和組建立文件訪問控制列表
基本格式化為; mount -o acl
Getfacl
Setfacl
Acl 訪問控制列表
自定義訪問控制列表是一種機制,每一個acl由一個用戶標識和組標識結合的整體。用戶標識與組標識配合相對應的訪問權限組成了
(user.group.mode)
訪問級別
(u.g,rwx) 特定的一個用戶,特定的組
(u.%,rwx)特定的一個用戶, 任意的組
(%.g,rwx)任意一個用戶,特定的組
(%.%,rwx)任意一個用戶,任意一個組
每一個文件都有13組的訪問權限模式,如果有多個類型的訪問權限條目,那麼較詳細的條目的優先級較高。在acl中設置某一個特定用戶的讀寫權限,如果設置了m(ask), 那用戶的權限還要受到
m(umask)的限制。原來是要兩個權限相與一下,才四用戶的正確權限
比如; 設置userA 的權限為r+w,而m設置為r,那麼userA的權限為r。
自動掛載文件系統
系統通過autofs服務自動的掛載文件系統
需要後台的automount 進程
Autofs服務的開關由 /etc/init.d/autofs腳本來控制
主要應用在軟驅和光驅的場合
如果該設備在一段時間內沒有被使用,那麼autofs會自動卸載該設備
Autofs 服務的主要配置文件
/etc/auto.master 和 /etc/auto.misc
通過這兩個文件來完成automount的設定
Auto.master 的每一行表示一個自動掛載的集群
每一行的格式為
自動掛載目錄的集合 參考文件(默認文件為/etc/auto.misc)
Auto.misc 文件中紀錄的則是每一個自動掛載的設備
每一個行的格式為;
掛載點(實際掛載點為“/自動掛載的目錄集合/掛載點”) 自動卸載的時間 設備文件名