1. linux下的文件系統各有什麼特點
一般linux常用的文件系統有ext2、ext3、ext4
Linux ext2/ext3文件系統使用索引節點來記錄文件信息,作用像windows的文件分配表。索引節點是一個結構,它包含了一個文件的長度、創建及修改時間、許可權、所屬關系、磁碟中的位置等信息。
Linux之前預設情況下使用的文件系統為Ext2,ext2文件系統的確高效穩定。但是,隨著Linux系統在關鍵業務中的應用,Linux文件系統的弱點也漸漸顯露出來了:其中系統預設使用的ext2文件系統是非日誌文件系統。
Ext3文件系統是直接從Ext2文件系統發展而來,目前ext3文件系統已經非常穩定可靠。它完全兼容ext2文件系統。用戶可以平滑地過渡到一個日誌功能健全的文件系統中來。這實際上了也是ext3日誌文件系統初始設計的初衷。
Linux kernel 自 2.6.28 開始正式支持新的文件系統 Ext4。 Ext4 是 Ext3 的改進版,修改了 Ext3 中部分重要的數據結構,而不僅僅像 Ext3 對 Ext2 那樣,只是增加了一個日誌功能而已。Ext4 可以提供更佳的性能和可靠性,還有更為豐富的功能:
與 Ext3 兼容。
更大的文件系統和更大的文件。Ext4 分別支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系統,以及 16TB 的文件。
無限數量的子目錄。
多塊分配
延遲分配
日誌校驗
在線碎片整理
持久預分配
等
2. linux文件系統的組成和作用
/bin 見截圖中的解釋
/boot 是系統啟動時所需文件的存放處。
/dev 顧名思義就是存放設備文件的地方。包括滑鼠,鍵盤等設備的驅動文件等
/etc見截圖中的解釋
/home ..
/lib 包括其他一些目錄下的lib文件夾存放的是 函數運行時所調用的函數庫
/mnt 是軟盤和光碟的掛載點
/opt 是安裝軟體的目錄
/proc 虛擬文件系統,目錄中的文件存放在內存中。包括可以查看CPU的信息。
/sbin ..
/srv 存放網頁的文件夾 支持www等服務
/temp是存放臨時文件的(所以重要文件不要放在這里)
/user 存放與用戶相關的信息
/var 用來管理系統運行期間的信息
3. Linux的文件系統
Linux的文件類型分為普通文件、d目錄文件、b塊設備文件、c字元設備文件(串口設備)、s套接字文件(特殊文件scoket)、l鏈接文件。
例如下圖,d開頭的是目錄文件,-開頭的是普通文件,l開頭的是鏈接文件
以touch,cp,tar,echo,cat等工具命令創建的文件都是普通文件,普通文件又分為以下三種:
1)純文本文件:文件內容可以直接讀取到數據(ASCL text)
2)二進制文件:linux中可執行文件(命令)
3)數據格式文件(一種特殊的文件 data)
ls -ld可以顯示所有的目錄文件
linux系統中的鏈接文件與WIN系統的快捷方式基本差不多,linux中鏈接文件又分為硬鏈接與軟鏈接。
硬鏈接: 是指通過索引節點來進行鏈接,在系統中多個文件各指向同一個索引節點,是可以的正常允許的,這種情況下的文件被稱之為硬鏈接。實際生產環境中用戶可以通過硬鏈接的方式來防止誤刪重要數據。
ln 源文件名 鏈接文件名 創建硬鏈接文件
軟鏈接: 也稱符號鏈接(快捷方式),實際上它是一個文本文件,它存儲著指向源文件鏈接的位置信息。
ln -s 源文件名 鏈接文件名 創建軟鏈接文件
另外要注意目錄是不可以創建硬鏈接文件的,但可創建軟鏈接文件,如下圖:
關於文件的軟鏈接和硬鏈接,總結起來有以下四種情況:
1)刪除源文件時,硬鏈接文件正常使用,軟鏈接文件就失效了。
2)刪除硬鏈接時,對源文件與軟鏈接無影響。
3)刪除軟鏈接時,對源文件與硬鏈接無任何影響。
4)刪除源文件、硬鏈接文件後,整個文件就會被刪除。
對於目錄的軟鏈接和硬鏈接,總結如下:
1)目錄是不可創建硬鏈接文件,可以創建軟鏈接文件。
2)目錄的軟鏈接是生產環境中非常實用的。
3)所有目錄都有一個硬鏈接「.」,目錄硬鏈接是不可跨越文件系統的。
Linux文件的擴展名主要是為了方便區分不同的文件,和windows的強類型擴展名不一樣。
1、.tar .tar.gz .tgz .zip 這類表示壓縮文件
2、.sh 表示shell腳本文件
3、.html .php .jsp 網頁文件
4、.conf 系統服務的配置文件
5、.rpm 表示RPM安裝包文件
每一個文件都有自己的屬性信息,它的屬性信息包括:索引節點、文件類型、許可權信息、所有者、所屬組、最近修改時間、大小、文件名或目錄名、硬鏈接數量。
我們以下圖的cron.daily這個文件為例,d表示文件類型是目錄文件,rwxr-xr-x這個表示許可權,第一個rwx表示的文件所有者用戶的許可權,第二個r-x表示的是所屬組的許可權,第三個r-x表示的是其他用戶的許可權。2表示硬鏈接數量,第一個root表示文件所有者是root,第二個root表示所屬組,42表示文件大小,May 27 2021表示最後的修改時間,corn.daily是文件名稱。
其中的索引節點編號需要通過ls -i才能看到,在最左邊顯示的那一串數字,如下圖所示:
4. Linux 文件系統管理
3.1Linux 文件系統類型
不同的操作系統使用不同類型的文件系統,為了與其他的操作系統兼容,以相互交換數據,
通常,每種操作系統都支持多種類型的文件系統。
Linux 中保存數據的磁碟分區通常採用EXT2/EXT3 文件系統,而實現虛擬存儲的swap 分區
採用swap 文件系統,同時Linux 內核支持十多種不同的文件系統。
1. EXT2 和EXT3 文件系統
EXT(Extended File System,擴展文件系統)是專為Linux 設計的文件系統。在Linux 發展
早起,起到重要中用,但在穩定性、速度和兼容性方面存在缺陷。
EXT2 是為解決EXT 系統存在的缺陷而設計的可擴展、高性能的文件系統。
EXT3 是EXT2 的增強版本,在EXT2 的基礎上,增加了文件系統的日誌管理功能。
EXT3 文件系統具有的特點:
(1) 高效性:當系統因為異常斷電或系統崩潰,重新啟動時不需要檢查文件系統的一致
性,只需要根據文件系統的日誌,快速檢測並恢復文件系統到正常狀態。
(2) 數據的完整性:可以保持數據域文件系統狀態的高度一致性,避免意外關機對文件
系統造成的破壞。
(3) 數據的存取速度更快:EXT3 文件系統的日誌功能對磁碟驅動器的讀/寫進行優化,
使讀/寫系統的速度更快。
(4) 數據易於轉換
2. swap 文件系統
用於Linux 的交換分區。在Linux 中,使用整個交換分區來提供虛擬內存。
3. VFAT 文件系統
VFAT 是Linux 對DOS、Windows 系統下的FAT 文件系統的統稱。
4. NFS 文件系統
NFS 即網路文件系統,用在UNIX 或Linux 系統間通過網路進行文件共享。
5. SMB 文件系統
SMB 是Samba 的縮寫,是另一種網路文件系統,用於在Windows 和Linux 系統之間共享文
件和列印機。
6. ISO9660 文件系統
CD-ROM使用的標准文件系統。
此外,Linux 支持的文件系統還有minix、msdos、ncpfs、hpfs、umsdos 等。
3.2 Linux 的目錄和文件
1.Linux 系統的目錄結構
Linux 文件系統由文件和目錄組成,文件是專門用來存儲數據的對象,目錄是一種用來組織
文件和其他目錄的容器。Linux 和DOS、Windows 系統一樣,使用樹形目錄結構來組織和管
理文件。
1. / 文件系統的入口,最高一級目錄;
2. /bin 基礎系統所需要的命令位於此目錄,是最小系統所需要的命令,如:ls, cp, mkdir等。
這個目錄中的文件都是可執行的,一般的用戶都可以使用。
3. /boot 包含Linux內核及系統引導程序所需要的文件,比如vmlinuz initrd.img文件都位於這個目錄中。在一般情況下,GRUB或LILO系統引導管理器也位於這個目錄;
4. /dev 設備驅動程序文件存儲目錄,比如音效卡、磁碟等,是Linux文件系統的一個閃亮的特性-所有對象都是文件或目錄。仔細觀察這個目錄你會發現hda1, hda2等,它們代表系統主硬碟的不同分區。
5. /etc 存放系統程序或者一般工具的配置文件。
如安裝了apache2之後,配置文件在/etc/apache2/目錄下。
/etc/init.d這個目錄是用來存放系統或伺服器以System V模式啟動的腳本,這在以System V模式啟動或初始化的系統中常見。
6. /home 普通用戶默認存放目錄Linux是多用戶環境,所以每一個用戶都有一個只有自己可以訪問的目錄(當然管理員也可以訪問)。它們以/home/username的方式存在。這個目錄也保存一些應用對於這個用戶的配置,比如IRC, X等。
7. /lib 庫文件存放目錄這里包含了系統程序所需要的所有共享庫文件,類似於Windows的共享庫DLL文件。
8. /var 這個目錄的內容是經常變動,因為存儲的文件,如資料庫,數據文件大小是在不斷的增大。
/var/log這是用來存放系統日誌的目錄。
/var/www目錄是定義Apache伺服器站點存放目錄;/var/lib用來存放一些庫文件,比如MySQL的,以及MySQL資料庫的的存放地;
/var/log系統日誌存放,分析日誌要看這個目錄的東西;
/var/spool列印機、郵件、代理伺服器等假離線目錄;
9. /lost+found 在ext2或ext3文件系統中,當系統意外崩潰或機器意外關機,而產生一些文件碎片放在這里。當系統啟動的過程中fsck工具會檢查這里,並修復已經損壞的文件系統。 有時系統發生問題,有很多的文件被移到這個目錄中,可能會用手工的方式來修復,或移到文件到原來的位置上。
Linux應該正確的關機。但有時你的系統也可能崩潰掉或突然斷電使系統意外關機。那麼啟動的時候fsck將會進行長時間的文件系統檢查。Fsck會檢測並試圖恢復所發現的'不正確的文件。被恢復的文件會放置在這個目錄中。所恢復的文件也許並不完整或並不合理,但畢竟提供了一些恢復數據的機會。
10. /media 即插即用型存儲設備的掛載點自動在這個目錄下創建,比如USB盤系統自動掛載後,會在這個目錄下產生一個目錄 ;CDROM/DVD自動掛載後,也會在這個目錄中創建一個目錄,類似cdrom的目錄。這個只有在最新的發行套件上才有. 10. /mnt /mnt這個目錄一般是用於存放掛載儲存設備的掛載目錄的,比如有cdrom等目錄。有時我們可以把讓系統開機自動掛載文件系統,把掛載點放在這里也是可以的。比如光碟機可以掛載到/mnt/cdrom。
11. /opt 表示的是可選擇的意思,有些軟體包也會被安裝在這里,也就是自定義軟體包,比如在Fedora Core 5.0中,OpenOffice就是安裝在這里。有些我們自己編譯的軟體包,就可以安裝在這個目錄中;通過源碼包安裝的軟體,可以通過./configure --prefix=/opt/,將軟體安裝到opt目錄。
這個目錄包含所有默認系統安裝之外的軟體和添加的包。
12. /proc 操作系統運行時,進程(正在運行中的程序)信息及內核信息(比如cpu、硬碟分區、內存信息等)存放在這里。/proc目錄是偽裝的文件系統proc的掛載目錄,proc並不是真正的文件系統。
這是系統中極為特殊的一個目錄,實際上任何分區上都不存在這個目錄。它實際是個實時的、駐留在內存中的文件系統。
13. /root Linux超級許可權用戶root的家目錄;
14. /sbin 大多是涉及系統管理的命令的存放,是超級許可權用戶root的可執行命令存放地,普通用戶無許可權執行這個目錄下的命令;
這個目錄和
/usr/sbin;/usr/X11R6/sbin或/usr/local/sbin目錄是相似的; 我們記住就行了,凡是目錄sbin中包含的都是root許可權才能執行的。
15. /tmp 臨時文件目錄,有時用戶運行程序的時候,會產生臨時文件。/tmp就用來存放臨時文件的。/var/tmp目錄和這個目錄相似。
許多程序在這里建立lock文件和存儲臨時數據。有些系統會在啟動或關機時清空此目錄。
16. /usr 這個是系統存放程序的目錄,比如命令、幫助文件等。
這個目錄下有很多的文件和目錄。
當我們安裝一個Linux發行版官方提供的軟體包時,大多安裝在這里。
如果有涉及伺服器配置文件的,會把配置文件安裝在/etc目錄中。
5. Linux文件系統特點
Linux之所以能在嵌人式系統領域取得如此輝煌的成績,與其自身的優良特性是分不開的。與其他操作系統相比,Linux具有以下一系列顯著的特點。
1.模塊化程度高
Linux的內核設計非常精巧,分成進程調度、內存管理、進程間通信、虛擬文件系統和網路介面五大部分;其獨特的模塊機制可根據用戶的需要,實時地將某些模塊插入或從內核中移走,使得Linux系統內核可以裁剪得非常小巧,很適合於嵌入式系統的需要。
2.源碼公開
由於Linux系統的開發從一開始就與GNU項目緊密地結合起來,所以它的大多數組成部分都直接來自GNU項目。任何人、任何組織只要遵守GPL條款,就可以自由使用Linux 源代碼,為用戶提供了最大限度的自由度。這一點也正投嵌入式系統所好,因為嵌入式系統應用千差萬別,設計者往往需要針對具體的應用對源碼進行修改和優化,所以是否能獲得源代碼 對於嵌入式系統的開發是至關重要的。加之Linux的軟體資源十分豐富,每種通用程序在Linux上幾乎都可以找到,並且數量還在不斷增加。這一切就使設計者在其基礎之上進行二次開發變得非常容易。另外,由於Linux源代碼公開,也使用戶不用擔心有「後閘」等安全隱患。
同時,源碼開放給各教育機構提供極大的方便,從而也促進了Linux的學習、推廣和應用。
3.廣泛的硬體支持
Linux能支持x86、ARM、MIPS、ALPHA和PowerPC等多種體系結構的微處理器。目前已成功地移植到數十種硬體平台,幾乎能運行在所有流行的處理器上。
由於世界范圍內有眾多開發者在為Linux的擴充貢獻力量,所以Linux有著異常豐富的驅動程序資源,支持各種主流硬體設各和最新的硬體技術,甚至可在沒有存儲管理單元MMU 的處理器上運行,這些都進一步促進了Linux在嵌入式系統中的應用。
4.安全性及可靠性好
內核高效穩定。Linux內核的高效和穩定已在各個領域內得到了大量事實的驗證。
Linux中大量網路管理、網路服務等方面的功能,可使用戶很方便地建立高效穩定的防火牆、路由器、工作站、伺服器等。為提高安全性,它還提供了大量的網路管理軟體、網路分析軟體和網路安全軟體等。
5.具有優秀的開發工具
開發嵌入式系統的關鍵是需要有一套完善的開發和調試工具。傳統的嵌入式開發調試工具是在線模擬器(In Circuit Emulator,ICE),它通過取代目標板的微處理器,給目標程序提供一個完整的模擬環境,從而使開發者能非常清楚地了解到程序在目標板上的工作狀態,便於監視和調試程序。在線模擬器的價格非常高,而且只適合做非常底層的調試。如果使用的是嵌人式Linux,一旦軟硬體能支持正常的串口功能,即使不用在線模擬器,也可以很好地進行開發和調試工作,從而節省了一筆不小的開發費用。嵌入式Linux為開發者提供了一套完整的工具鏈(Tool Chain),能夠很方便地實現從操作系統到應用軟體各個級別的調試。
6.有很好的網路支持利文件系統支持
Linux從誕生之日起就與Internet密不可分,支持各種標準的Internet網路協議,並且很容易移植到嵌入式系統當中。目前,Linux幾乎支持所有主流的網路硬體、網路協議和文件系統,因此它是NFS的一個很好的平台。
另一方面,由於Linux有很好的文件系統支持(例如,它支持Ext2、FAT32、romfs等文件系統),是數據各份、同步和復制的良好平台,這些都為開發嵌入式系統應用打下了堅實的基礎。
7.與UNIX完全兼容
目前,在Linux中所包含的工具和實用程序,可以完成UNIX的所有主要功能。
但由於Linux不是為實時而設計的,因而這就成了Linux在實時系統中應用的最大遺憾。不過,目前有眾多的自由軟體愛好者正在為此進行不懈的努力,也取得了諸多成果
6. Linux btrfs文件系統及管理
Linux btrfs文件系統及管理
linux文件系統,具有寫時復制COW(-on-write),改善ext3文件系統單文件大小限制,並加入其他特性,如可寫快照,快照的快照,內建RAID,子卷(subvloume),專注於容錯,修復和易於管理,下面一起來看看什麼是linux btrfs文件系統及管理關系吧!
什麼是btrfs?
Btrfs(B-tree文件系統,通常念成Butter FS,Better FS或B-tree FS),linux文件系統,具有寫時復制COW(-on-write),改善ext3文件系統單文件大小限制,並加入其他特性,如可寫快照,快照的快照,內建RAID,子卷(subvloume),專注於容錯,修復和易於管理。單文件可達16EB,最大文件數量2^64,最大卷容量16EB,等。
btrfs功能特性
1,COW:寫時復制,每次寫入數據時,先將數據寫入到新的block,寫入成功後,更改舊數據塊指針到新數據塊,而非更改本身。
2,多物理卷支持,btrfs內建raid,可在線增刪磁碟設備,可在線擴展和縮減磁碟空間。
3,數據和元數據校驗碼,checksum
4,子卷,可單獨掛載子卷
5,可寫快照,快照的快照,單個文件快照。
6,透明壓縮
7,ext3/4和btrfs無痛互轉
btrfs 基本用法:
bash/shell Code復制內容到剪貼板
[root@localhost ~]# btrfs --help #查看幫助可以看到btrfs 有很多子命令,用法也很多,這里只舉例常用選項。
usage: btrfs [--help] [--version] [...] []
btrfs subvolume create [-i ] [/] #創建子卷
Create a subvolume
btrfs subvolume delete [options] [...] #刪除子卷
Delete subvolume(s)
btrfs subvolume list [options] [-G [+|-]value] [-C [+|-]value] [--sort=gen,ogen,rootid,path] #顯示子卷列表
List subvolumes (and snapshots)
btrfs subvolume snapshot [-r] [-i ] |[/] #創建子卷快照
Create a snapshot of the subvolume
btrfs subvolume get-default #獲取子卷默認的文件系統
Get the default subvolume of a filesystem
btrfs subvolume set-default #設置默認系統給子卷
Set the default subvolume of a filesystem
btrfs subvolume find-new #列出btrfs文件系統中最近修改的文件,結合find命令
List the recently modified files in a filesystem
btrfs subvolume show #顯示更多的子卷信息
Show more information of the subvolume
btrfs subvolume sync [...] #子卷同步,類似mount同步模式,內存數據同步到磁碟,有待查證。
Wait until given subvolume(s) are completely removed from the filesystem.
btrfs filesystem df [options] #顯示掛載的文件系統詳細信息。
Show space usage information for a mount point
btrfs filesystem show [options] [|||label] #顯示創建文件系統的磁碟信息。
Show the structure of a filesystem
btrfs filesystem sync #強制文件系統同步,
Force a sync on a filesystem
btrfs filesystem defragment [options] |
[|...] #碎片整理
Defragment a file or a directory
btrfs filesystem resize [devid:][+/-][kKmMgGtTpPeE]|[devid:]max #btrfs文件系統在線擴展和縮減空間
Resize a filesystem
btrfs filesystem label [|] [] #改變btrfs文件系統卷標
Get or change the label of a filesystem
btrfs filesystem usage [options] [..] #顯示文件系統當前的使用信息。
Show detailed information about internal filesystem usage .
btrfs balance start [options] #改變磁碟chunk,在線改 數據和元數據 存儲方式,單盤改raid,前提滿足raid要求。
Balance chunks across the devices
btrfs balance pause #暫停chunk更改,數據量較大,轉換時間較長時,先暫停。
Pause running balance
btrfs balance cancel #取消chunk更改,如上
Cancel running or paused balance
btrfs balance resume #中斷balance的操作,如上
Resume interrupted balance
btrfs balance status [-v] #顯示balance操作狀態 如上
Show status of running or paused balance
btrfs device add [options] [...] #文件系統增加磁碟
Add a device to a filesystem
btrfs device delete [...] #文件系統刪除磁碟
Remove a device from a filesystem
btrfs device scan [(-d|--all-devices)| [...]] #文件系統磁碟掃描
Scan devices for a btrfs filesystem
btrfs device ready #猜測是檢測加入的設備有沒有被掛載
Check device to see if it has all of its devices in cache for mounting
btrfs device stats [-z] | #顯示文件系統的設備狀態
Show current device IO stats. -z to reset stats afterwards.
btrfs device usage [options] [..] #顯示文件系統內部設備詳細使用信息
Show detailed information about internal allocations in devices.
btrfs文件系統管理
為分區創建btrfs文件系統
bash/shell Code復制內容到剪貼板
[root@localhost ~]# fdisk -l | grep "^Disk /dev/sd[a-z]" #准備sd{b,c,d,e}4塊20G磁碟,未做任何分區。
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sde: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors
創建單分區btrfs並查看
bash/shell Code復制內容到剪貼板
[root@localhost ~]# mkfs.btrfs -L 'btrfs' /dev/sdb
btrfs-progs v3.19.1
See http://btrfs.wiki.kernel.org for more information.
Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
Turning ON incompat feature 'skinny-metadata': reced-size metadata extent refs
fs created label btrfs on /dev/sdb
nodesize 16384 leafsize 16384 sectorsize 4096 size 20.00GiB
[root@localhost ~]# btrfs filesystem show
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 1 FS bytes used 112.00KiB
devid 1 size 20.00GiB used 2.04GiB path /dev/sdb
btrfs-progs v3.19.1
[root@localhost ~]# mount -o compress=lzo -L btrfs /btrfs/ 掛載時可以設定透明壓縮機制。
[root@localhost ~]# btrfs filesystem df /btrfs
Data, single: total=8.00MiB, used=256.00KiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, DUP: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
再添加一塊磁碟
bash/shell Code復制內容到剪貼板
[root@localhost ~]# btrfs device add /dev/sdc /btrfs #添加磁碟,刪除用btrfs device delete /dev/sdc /btrfs
[root@localhost ~]# btrfs fi sh
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 2 FS bytes used 384.00KiB
devid 1 size 20.00GiB used 2.04GiB path /dev/sdb
devid 2 size 20.00GiB used 0.00B path /dev/sdc
btrfs-progs v3.19.1
[root@localhost ~]#
在線增加或縮減空間,在線改變空間,可以讓lvm坐冷板凳了。
bash/shell Code復制內容到剪貼板
[root@localhost ~]# btrfs fi resize -10G /btrfs/ #在線縮減空間
Resize '/btrfs/' of '-10G'
[root@localhost ~]# btrfs fi sh
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 2 FS bytes used 384.00KiB
devid 1 size 10.00GiB used 2.04GiB path /dev/sdb
devid 2 size 20.00GiB used 0.00B path /dev/sdc
btrfs-progs v3.19.1
[root@localhost ~]# btrfs fi resize +7G /btrfs/ #在線增加空間
Resize '/btrfs/' of '+7G'
[root@localhost ~]# btrfs fi sh
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 2 FS bytes used 384.00KiB
devid 1 size 17.00GiB used 2.04GiB path /dev/sdb
devid 2 size 20.00GiB used 0.00B path /dev/sdc
btrfs-progs v3.19.1
[root@localhost ~]#
在線更改數據和元數據的結構
bash/shell Code復制內容到剪貼板
[root@localhost ~]# btrfs fi df /btrfs/
Data, single: total=8.00MiB, used=256.00KiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, DUP: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@localhost ~]# btrfs balance start -mconvert=raid1 /btrfs/ #-mconvert 為改變metadata元數據區的存儲結構
Done, had to relocate 4 out of 5 chunks
[root@localhost ~]# btrfs fi sh
Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a
Total devices 2 FS bytes used 192.00KiB
devid 1 size 17.00GiB used 296.00MiB path /dev/sdb
devid 2 size 20.00GiB used 288.00MiB path /dev/sdc
btrfs-progs v3.19.1
[root@localhost ~]# btrfs fi df /btrfs/
Data, single: total=8.00MiB, used=64.00KiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=256.00MiB, used=112.00KiB #對比上改為了raid1
GlobalReserve, single: total=16.00MiB, used=0.00B
[root@localhost ~]# btrfs balance start -dconvert=raid1 /btrfs/ #-dconvert 為改變data數據區的存儲結構
Done, had to relocate 1 out of 3 chunks
7. linux 的文件系統是什麼
文件系統是操作系統用於明確存儲設灶晌備(常見的是磁碟,也有基於NANDFlash的固態硬隱亮鋒盤)或分區上的文件的方法和數據結構;
即在存儲設備上組織文件的方法。
操作系統中負責管理和存儲文件信息的軟體機構稱為文件管理系統,簡稱文件系統。
文件系統由三部分組成:文件系統的介面,對對象操縱和管理的軟體集合,對象及屬性。
從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保鍵搜護和檢索的系統。
8. linux文件系統基礎知識
linux文件系統基礎知識匯總
1、linux文件系統分配策略
塊分配( block allocation ) 和 擴展分配 ( extent allocation )
塊分配:磁碟上的文件塊根據需要分配給文件,避免了存儲空間的浪費。但當文件擴充時,會造成文件中文件塊的不連續,從而導致過多的磁碟尋道時間。
每一次文件擴展時,塊分配演算法就需要寫入文件塊的結構信息,也就是 meta-dada 。meta-data總是與文件一起寫入存儲設備,改變文件的操作要等到所有meta-data的操作都完成後才能進行,
因此,meta-data的操作會明顯降低整個文件系統的性能。
擴展分配: 文件創建時,一次性分配一連串連續的塊,當文件擴展時,也一次分配很多塊。meta-data在文件創建時寫入,當文件大小沒有超過所有已分配文件塊大小時,就不用寫入meta-data,直到需要再分配文件塊的時候。
擴展分配採用成組分配塊的方式,減少了SCSI設備寫數據的時間,在讀取順序文件時具有良好的性能,但隨機讀取文件時,就和塊分配類似了。
文件塊的組或塊簇 ( block cluster) 的大小是在編譯時確定的。簇的大小對文件系統的性能有很大的影響。
註: meta-data 元信息:和文件有關的信息,比如許可權、所有者以及創建、訪問或更改時間等。
2、文件的記錄形式
linux文家系統使用索引節點(inode)來記錄文件信息。索引節點是一種數據結構,它包含了一個文件的長度、創建及修改時間、許可權、所屬關系、磁碟中的位置等信息。
一個文件系統維護了一個索引節點的數組,每個文件或目錄都與索引節點數組中的唯一的元素對應。每個索引節點在數組中的索引號,稱為索引節點號。
linux文件系統將文件索引節點號和文件名同時保存在目錄中,所以,目錄只是將文件的名稱和它的索引節點號結合在一起的一張表,目錄中每一對文件名稱和索引節點號稱為一個連接。
對於一個文件來說,有一個索引節點號與之對應;而對於一個索引節點號,卻可以對應多個文件名。
連接分為軟連接和硬連接,其中軟連接又叫符號連接。
硬連接: 原文件名和連接文件名都指向相同的物理地址。目錄不能有硬連接;硬連接不能跨文件系統(不能跨越不同的分區),文件在磁碟中只有一個拷貝。
由於刪除文件要在同一個索引節點屬於唯一的連接時才能成功,因此硬連接可以防止不必要的誤刪除。
軟連接: 用 ln -s 命令建立文件的符號連接。符號連接是linux特殊文件的.一種,作為一個文件,它的數據是它所連接的文件的路徑名。沒有防止誤刪除的功能。
3、文件系統類型:
ext2 : 早期linux中常用的文件系統
ext3 : ext2的升級版,帶日誌功能
RAMFS : 內存文件系統,速度很快
NFS : 網路文件系統,由SUN發明,主要用於遠程文件共享
MS-DOS : MS-DOS文件系統
VFAT : Windows 95/98 操作系統採用的文件系統
FAT : Windows XP 操作系統採用的文件系統
NTFS : Windows NT/XP 操作系統採用的文件系統
HPFS : OS/2 操作系統採用的文件系統
PROC : 虛擬的進程文件系統
ISO9660 : 大部分光碟所採用的文件系統
ufsSun : OS 所採用的文件系統
NCPFS : Novell 伺服器所採用的文件系統
SMBFS : Samba 的共享文件系統
XFS : 由SGI開發的先進的日誌文件系統,支持超大容量文件
JFS :IBM的AIX使用的日誌文件系統
ReiserFS : 基於平衡樹結構的文件系統
udf: 可擦寫的數據光碟文件系統
4、虛擬文件系統VFS
linux支持的所有文件系統稱為邏輯文件系統,而linux在傳統的邏輯文件系統的基礎上增加料一個蓄念文件系統( Vitual File System ,VFS) 的介面層。
虛擬文件系統(VFS) 位於文件系統的最上層,管理各種邏輯文件系統,並可以屏蔽各種邏輯文件系統之間的差異,提供統一文件和設備的訪問介面。
5、文件的邏輯結構
文件的邏輯結構可分為兩大類: 位元組流式的無結構文件 和 記錄式的有結構文件。
由位元組流(位元組序列)組成的文件是一種無結構文件或流式文件 ,不考慮文件內部的邏輯結構,只是簡單地看作是一系列位元組的序列,便於在文件的任意位置添加內容。
由記錄組成的文件稱為記錄式文件 ,記錄是這種文件類型的基本信息單位,記錄式文件通用於信息管理。
6、文件類型
普通文件 : 通常是流式文件
目錄文件 : 用於表示和管理系統中的全部文件
連接文件 : 用於不同目錄下文件的共享
設備文件 : 包括塊設備文件和字元設備文件,塊設備文件表示磁碟文件、光碟等,字元設備文件按照字元操作終端、鍵盤等設備。
管道(FIFO)文件 : 提供進程建通信的一種方式
套接字(socket) 文件: 該文件類型與網路通信有關
7、文件結構: 包括索引節點和數據
索引節點 : 又稱 I 節點,在文件系統結構中,包含有關相應文件的信息的一個記錄,這些信息包括文件許可權、文件名、文件大小、存放位置、建立日期等。文件系統中所有文件的索引節點保存在索引節點表中。
數據 : 文件的實際內容。可以是空的,也可以非常大,並且擁有自己的結構。
8、ext2文件系統
ext2文件系統的數據塊大小一般為 1024B、2048B 或 4096B
ext2文件系統採用的索引節點(inode):
索引節點採用了多重索引結構,主要體現在直接指針和3個間接指針。直接指針包含12個直接指針塊,它們直接指向包含文件數據的數據塊,緊接在後面的3個間接指針是為了適應文件的大小變化而設計的。
e.g: 假設數據塊大小為1024B ,利用12個直接指針,可以保存最大為12KB的文件,當文件超過12KB時,則要利用單級間接指針,該指針指向的數據塊保存有一組數據塊指針,這些指針依次指向包含有實際數據的數據塊,
假如每個指針佔用4B,則每個單級指針數據塊可保存 1024/4=256 個數據指針,因此利用直接指針和單級間接指針可保存 1024*12+1024*256=268 KB的文件。當文件超過268KB時,再利用二級間接指針,直到使用三級間接指針。
利用直接指針、單級間接指針、二級間接指針、三級間接指針可保存的最大文件大小為:
1024*12+1024*256+1024*256*256+1024*256*256*256=16843020 KB,約 16GB
若數據塊大小為2048B,指針佔4B,則最大文件大小為: 2048*12+2048*512+2048*512*512+2048*512*512*512=268,960,792 KB 約 268GB
若數據塊大小為4096B,指針佔4B,則最大文件大小為: 4096*12+4096*1024+4096*1024*1024+4096*1024*1024*1024=4,299,165,744 KB ,約 4TB
註: 命令 tune2fs -l /dev/sda5 可查看文件系統
ext2文件系統最大文件名長度: 255個字元
ext2文件系統的缺點:
ext2在寫入文件內容的同時並沒有同時寫入文件meta-data, 其工作順序是先寫入文件的內容,然後等空閑時候才寫入文件的meta-data。若發生意外,則文件系統就會處於不一致狀態。
在重新啟動系統的時候,linux會啟動 fsk ( file system check) 的程序,掃描整個文件系統並試圖修復,但不提供保證。
9、ext3文件系統:
ext3基於ext2的代碼,所以磁碟格式與ext2相同,使用相同的元數據。
ext2文件系統無損轉化為ext3文件系統: tune2fs -j /dev/sda6
日誌塊設備( Journaling block device layer,JBD)完成ext3文件系統日誌功能。JBD不是ext3文件系統所特有的,它的設計目標是為了向一個塊設備添加日誌功能。
當一個文件修改執行時,ext3文件系統代碼將通知JBD,稱為一個事務(transaction)。發生意外時,日誌功能具有的重放功能,能重新執行中斷的事務。
日誌中的3種數據模式:
1)、data=writeback :不處理任何形式的日誌數據,給用戶整體上的最高性能
2)、data=odered :只記錄元數據日誌,但將元數據和數據組成一個單元稱為事務(transaction) 。此模式保持所句句的可靠性與文件系統的一致性,性能遠低於data=writeback模式,但比data=journal模式快
3)、data=journal :提供完整的數據及元數據日誌,所有新數據首先被寫入日誌,然後才被定位。意外發生過後,日誌可以被重放,將數據與元數據帶回一致狀態。這種模式整體性能最慢,但數據需要從磁碟讀取和寫入磁碟時卻是3種模式中最快的。
ext3文件系統最大文件名長度: 255個字元
ext3文件系統的優點:可用性、數據完整性、速度、兼容性
10、ReiserFS文件系統
ReiserFS文件系統是由Hans Reiser和他領導的開發小組共同開發的,整個文件系統完全是從頭設計的,是一個非常優秀的文件系統。也是最早用於Linux的日誌文件系統之一。
ReiserFS的特點
先進的日誌機制
ReiserFS有先進的日誌(Journaling/logging)功能 機制。日誌機制保證了在每個實際數據修改之前,相應的日誌已經寫入硬碟。文件與數據的安全性有了很大提高。
高效的磁碟空間利用
Reiserfs對一些小文件不分配inode。而是將這些文件打包,存放在同一個磁碟分塊中。而其它文件系統則為每個小文件分別放置到一個磁碟分塊中。
獨特的搜尋方式
ReiserFS基於快速平衡樹(balanced tree)搜索,平衡樹在性能上非常卓越,這是一種非常高效的演算法。ReiserFS搜索大量文件時,搜索速度要比ext2快得多。Reiserfs文件 系統使用B*Tree存儲文件,而其它文件系統使用B+Tree樹。B*Tree查詢速度比B+Tree要快很多。Reiserfs在文件定位上速度非常 快。
在實際運用中,ReiserFS 在處理小於 4k 的文件時,比ext2 快 5 倍;帶尾文件壓縮功能(默認)的ReiserFS 比ext2文件系統多存儲6%的數據。
支持海量磁碟
ReiserFS是一個非常優秀的文件系統,一直被用在高端UNIX系統上,可輕松管理上百G的文件系統,ReiserFS文件系統最大支持的文件系統尺寸為16TB。這非常適合企業級應用中。
優異的性能
由於它的高效存儲和快速小文件I/O特點,使用ReiserFs文件系統的PC,在啟動X窗口系統時,所花的時間要比在同一台機器上使用ext2文 件系統少1/3。另外,ReiserFS文件系統支持單個文件尺寸為4G的文件,這為大型資料庫系統在linux上的應用提供了更好的選擇。
;9. Linux文件系統目錄結構解析
下載一個程序源代碼,編譯並且安裝的時候,如果不特別指定安裝的程序路徑,那麼默認會將程序相關的文件安裝到這個目錄的對應目錄下。例如,安裝的程序可執行文件被安裝(安裝實質就是復制到了/usr/local/bin下面,此程序(可執行文件所需要依賴的庫文件被安裝到了/usr/local/lib目錄下,被安裝的軟體如果是某個開發庫(例如Qt,Gtk等那麼相應的頭文件可能就被安裝到了/usr/local/include中等等。也就是說,這個目錄存放的內容,一般都是我們後來自己安裝的軟體的默認路徑,如果擇了這個默認路徑作為軟體的安裝路徑,被安裝的軟體的所文件都限制在這個目錄中,其中的子目錄就相應於根目錄的子目錄。
/proc特殊文件目錄:
這是一個特殊的目錄,它同樣是一個虛擬文件系統。通過這個目錄下的各個文件,可以查看系統的內核信息。
/opt保留的文件目錄:
一些自定義軟體包或者第三方工具,就可以安裝在這里。
/mnt文件系統或設備的通用掛載點:
這個目錄一般是用於存放掛載儲存設備的掛載目錄的,比如磁碟,光碟機,網路文件系統等,當我們需要掛載某個磁碟設備的時候,可以把磁碟設備掛載到這個目錄上去,這樣我們可以直接通過訪問這個目錄來訪問那個磁碟了。可以在/mnt目錄下面多建立幾個子目錄,掛載的時候掛載到這些子目錄上面,也可以在任意位置設置掛在點,但是不建議這么做。
/media掛載的媒體設備目錄:
掛載的媒體設備目錄,一般可移動設備掛載到這里,例如cdrom,loppy和cdrecord等。
/var內容經常變化的目錄:
此目錄下文件的大小可能會改變,如緩沖文件,日誌文件,緩存文件,等一般都存放在這里。
/tmp臨時文件目錄:
該目錄存放系統中的一些臨時文件,文件可能會被系統自動清空。的系統直接把tmpfs類型的文件系統掛載到這個目錄上,tmpfs文件系統由linux內核支持,在這個文件系統中的數據,實際上是內存中的,由於內存的數據斷電易失,當系統重新啟動的時候我們就會發現這個目錄被清空了。
/lost+found恢復文件存放的位置:
當系統崩潰的時候,在系統修復過程中需要恢復的文件,可能就會在這里被找到了,這個目錄一般為空。
以上目錄,是最常見的重要目錄。其中,有些目錄初學者容易混淆,這里簡單區分一下:
/bin,/sbin與/usr/bin,/usr/sbin:
/bin一般存放對於用戶和系統來說「必須」的程序(二進制文件)。
/sbin一般存放用於系統管理的「必需」的程序(二進制文件,一般普通用戶不會使用,根用戶使用)。
/usr/bin一般存放的只是對用戶和系統來說「不是必需的」程序(二進制文件)。
/usr/sbin一般存放用於系統管理的系統管理的不是必需的程序(二進制文件)。
/lib與/usr/lib:
/lib和/usr/lib的區別類似/bin,/sbin與/usr/bin,/usr/sbin。
/lib一般存放對於用戶和系統來說「必須」的庫(二進制文件)。
/usr/lib一般存放的只是對用戶和系統來說「不是必需的」庫(二進制文件)。