硬盤,分區,文件系統,格式化
分區是分區,格式化就是安裝文件系統。如果不格式化,原有內容就不會丟失。
直到今天,才理解了這一點,格式化與文件系統的關系。一定不要格式化操作。
分區類型
[root@250-shiyan dev]# fdisk /dev/sda 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): Command (m for help): l 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx 5 Extended 42 SFS 86 NTFS volume set da Non-FS data 6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility 8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt 9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b 11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor 12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor 14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary 16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS 17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT 1e Hidden W95 FAT1
磁盤文件系統 ext3
內存文件系統 tmpfs
網絡文件系統 nfs,mfs,gfs
proc文件系統是偽文件系統(也即虛擬文件系統)
devpts文件系統是偽文件系統(也即虛擬文件系統)
tmpfs文件系統是內存文件系統
sysfs 是一種基於 ramfs 實現的內存文件系統,與其它同樣以 ramfs 實現的內存文件系統(configfs,debugfs,tmpfs,...)
mfs文件系統
[root@250-shiyan connections]# mount|column -t
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.2.231:9421 on /mfs1 type fuse.mfs (rw,nosuid,nodev,allow_other)
[root@250-shiyan connections]# df -ha
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 15G 1.7G 12G 13% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
tmpfs 246M 0 246M 0% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot
none 0 0 0 - /proc/sys/fs/binfmt_misc
sunrpc 0 0 0 - /var/lib/nfs/rpc_pipefs
nfsd 0 0 0 - /proc/fs/nfsd
192.168.2.231:9421 200G 0 200G 0% /mfs1
文件系統類型
Andrew文件系統(AFS) 結構與NFS相似,由卡內基·梅隆大學信息技術中心(ITC)開發、現由前ITC職員組成的Transarc公司負責開發和銷售。AFS較NFS有所增強。
AFS是一種文件系統,它能夠使用戶方便、高效地共享分布在局域網或廣域網中的文件,並通過鑒權數據庫與ACL的配合為用戶提供更高的安全性。
文件系統 類型名稱 用途
Second Extended filesystem ext2 最常用的Linux文件系統
Three Extended filesystem ext3 ext2的升級版,帶日志功能
Minix filesystem minix Minix文件系統,很少用
RAM filesystem ramfs 內存文件系統,速度超快
Network File System(NFS) NFS 網絡文件系統,由SUN發明,主要用於遠程文件共享
DOS-FAT filesystem msdos ms-dos文件系統
VFAT filesystem vfat Windows95/98采用的文件系統
NT filesystem ntfs Windows NT采用的文件系統
HPFS filesystem hpfs OS/2采用的文件系統
/proc filesystem proc 虛擬的進程文件系統
ISO 9660 filesystem iso9660 大部份光盤所用的文件系統
UFS filesystem ufs Sun OS所用的文件系統
Apple Mac filesystem hfs Macintosh機采用的文件系統
Novell filesystem ncpfs Novell服務器所采用的文件系統
SMB filesystem smbfs Samba的共享文件系統
XFS filesystem xfs 由SGI開發的先進的日志文件系統,支持超大容量文件
JFS filesystem jfs IBM的AIX使用的日志文件系統
ReiserFS filesystem reiserfs 基於平衡樹結構的文件系統
Zettabyte File System zfs (暫定) Zettabyte File System是隨Solaris 10一起發布的最新的文件系統。它是第一個128位的文件系統,包含多項創新技術。據Sun公司介紹,這是他們的最后一個文件系統,可見Sun公司對該文 件系統的自信。該文件系統現時Linux還不支持,所以上面介紹文件類型時說明是暫定zfs。Sun ZFS文件系統的對外移植許可方式采用了CDDL標准,與Linux平台采用的GPL許可標准並不兼容 ,而導致了目前為止ZFS尚無法順利地在Linux平台上使用。但開源社區啟動了一個zfs on fuse項目,可以在Linux use space下使用zfs系統。
文件系統是一個完整的目錄結構,包括根目錄和他底下任何文件的目錄,並且文件系統被限定在單一的邏輯卷上。
http://hi.baidu.com/ccircle/item/b9e5006c5068fe136895e607 文件目錄結構較詳細
/proc/partitions
/etc/fstab 是開機時的設定檔,不過,實際掛載的項目是記錄到 /etc/mtab 與 /proc/mounts 這兩個檔案當中的。每次我們在更動 filesystem 的掛載時,也會同時更動這兩個檔案喔!
/proc/mounts
/etc/filesystems:系統指定的默認掛載文件系統類型
/proc/filesystems:Linux系統支持的文件系統類型 如果要使用一個不支持的,需要重新編譯內核或插入相應的模塊
mount中所顯示的 mount -l (-l選項會多輸出卷標)
mkfs.bfs mkfs.ext2 mkfs.jfs mkfs.msdos mkfs.vfat mkfs.cramfs mkfs.ext3 mkfs.minix mkfs.reiserfs mkfs.xfs 等命令來格式化分區
mkswap 把一個分區格式化成為swap交換區
/lib/modules/$(uname -r)/kernel/fs/ 查看支持的文件系統驅動程序
文件系統是操作系統用於明確磁盤或分區上文件的方法和數據結構,即在磁盤上組織文件的方法。文件系統是整個操作系統中重要的組成部分,是操作系統正常運行的基本條件。了解Linux文件系統對於深入學習、研究Linux是非常重要的。
Linux系統核心可以支持十多種文件系統類型:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
這里面雖然是有了,但我怎么知道我的Linux系統有沒有相關文件系統類型的驅動呢?我們可以通過 /lib/modules/$(uname -r)/kernel/fs/這個目錄里面的信息來查看支持的文件系統驅動程序。
如果是在這之外的文件系統,就必需加上-t和相應的文件系統類型了。
掛載光盤應該加上-t iso9660,因為我們的系統文件系統的驅動中已經有了,所以我就不用加參數,系統就能認識了。
常見文件系統類型
不同的操作系統使用的文件系統類型也不同,例如Windows XP支持FAT32和NTFS文件系統。Linux支持的文件系統很多,下面簡單介紹。
1.Minix
Minix是Linux支持的第1個文件系統,該文件系統對用戶的限制很多,性能很低。其最大缺點是最大只支持64MB的硬盤分區,現在該文件系統類型已無人使用了。
2.ext
ext是專門為Linux操作系統設計的文件系統類型,稱為擴展文件系統,在Linux發展的早期,起過重要的作用。但由於其穩定性、速度和兼容性方面存在許多缺陷,ext文件系統現在也很少使用。
3.ext2
ext2文件系統是為解決ext文件系統的缺陷而設計的可擴展、高性能的文件系統,稱為二級擴展文件系統,是Linux系統中標准的文件系統,支持256個字節的長文件名,文件存取性能比ext有很大的提高。
4.ext3
ext3 文件系統是ext2的升級版本,兼容ext2。與ext2文件系統相比,ext3增加了文件系統日志記錄功能,稱為日志式文件系統,是目前Linux默認 采用的文件系統。由於具有了日志功能,當因斷電或其他異常事件而非正常關機時,重啟系統后操作系統會根據文件系統的日志,快速檢測並恢復文件系統到正常的 狀態,提高數據的安全性。
5.MS-DOS
這是DOS、Windows和一些OS/2計算機使用的文件系統。對於MS-DOS文件系統,文件名長度不能超過8個字符,擴展名不能超過3個字符。
6.UMSDOS
這是Linux使用的、擴展的DOS文件系統,增加了對長文件名、UID、GID、POSIX權限的支持,允許一個普通的DOS文件系統用於Linux。
7.VFAT
這是Windows 9x、Windows XP使用的擴展的DOS文件系統,增加對長文件名的支持。
8.ISO9660
這是一種針對ISO9660標准的CD-ROM文件系統,允許用戶在PC、Mac和其他主要計算機平台上讀取CD-ROM文件。幾乎所有帶有CD-ROM的計算機都可以從ISO9660文件系統讀取文件。
9.SYSV
這是System V文件系統在Linux上的實現,實現了所有的Xenix、System V/386文件系統。
10.NFS
這是用於存取遠程計算機硬盤的文件系統。
11.SMB
這是支持SMB協議的網絡文件系統,Windows用它來實現工作組共享。
12.SWAP
這是一種特殊的分區,用於在內存和硬盤間交換數據的文件系統。
13.NTFS
這是Windows NT文件系統,Windows 2000/XP及以后的操作系統都支持該文件系統。
AFS文件系統
歷史
AFS是美國卡內基梅隆大學CMU與IBM聯合研制的(項目開始於1Array82年,相關文章始見於1Array86年),發行了幾個版本,AFS3.0是頂峰之作。其后,針對AFS的工作轉移到Transarc公司,AFS演變為OSF的分布式計算環境(DCE)的分布式系統(DFS)組成部分。1ArrayArray8 年 IBM 收購了 Transarc,並使 AFS 成為一個開放源碼產品,叫做 OpenAFS。同時, OpenAFS 衍生了其他的分布式文件系統,如 Coda 和 Arla。其版本發展如下圖所示:
AFS的版本演化
基本概念
AFS是專門為在大型分布式環境中提供可靠的文件服務而設計的。AFS擴展性好,能夠擴展到幾千個節點,提供一個統一的位置無關的名字空間。AFS規定了以"/afs/cellname"為第一級目錄的基本結構,使用戶能夠在任何地方都能夠使用同一個目錄地址對自已的文件進行透明訪問。
AFS的掛載示例
AFS中幾個重要的概念:
單元(Cell):是AFS一個獨立的維護站點(如上圖的ihep.ac.cn),通常代表一個組織的計算資源。一個存儲節點在同一時間內只能屬於一個站點;而一個單元可以管理數個存儲節點。
卷(Volumes):是一個AFS目錄的邏輯存儲單元,我們可以把它理解為AFS的cell之下的一個文件目錄,如上圖單元ihep.ac.cn之下的usr目錄。AFS系統負責維護一個單元中存儲的各個節點上的卷內容保持一致。
掛載點(Mount Points):關聯目錄和卷的機制,掛載點 卷,例如上圖的/afs/ihep.ac.cn/usr這個掛載點就關聯在usr卷上。
復制(Replication):隱藏在一個單元之后的卷可能在多個存儲節點上維護着備份,但是他們對用戶是不可見的。當一個存儲節點出現故障是,另一個備份卷會接替工作。
緩存和回調(Caching and Callbacks):AFS依靠客戶端的大量緩存來提高訪問速度。當被多個客戶端緩存的文件被修改時, 必須通過回調來通知其他客戶端更新。
Tokens和Access Control List:用於訪問權限管理,這里不在贅述。
設計架構
AFS 管理人員把單元划分為所謂的卷。雖然卷可以隨硬盤分區協同擴展 (co-extensive),但大多數管理人員都不會將整個分區只分為一個卷。AFS 卷實際上是由一個單獨的、稱作 Volume Manager 的 UNIX 類型的進程管理的。您可以以一種常見的方式從 UNIX 文件系統目錄安裝卷。但是,您可以將 AFS 卷從一個文件服務器移動到另一個文件服務器 ?? 同樣是由一個 UNIX 類型的進程來管理的 ?? 但是 UNIX 目錄不能從一個分區實際地移動到另一個分區上。AFS 通過 Volume Location Manager 自動跟蹤卷和目錄的位置,並留意復制的卷和目錄。因此,每當文件服務器非預期地停止操作,用戶根本無需擔心,因為 AFS 會把用戶切換到另一個文件服務器機器上的復制卷,而用戶可能都不會注意到。用戶從來不對 AFS 服務器上的文件進行操作。他們操作已經由客戶端緩存管理器從文件服務器中取出的文件。
AFS部署示例
AFS服務器運行下列進程:
文件服務器(File Server)進程:這個進程響應客戶工作站對文件服務的請求,維護目錄結構,監控文件和目錄狀態信息,檢查用戶的訪問。
卷宗服務器(Volume Server)進程:此進程處理與卷宗有關的文件系統操作,如卷宗生成、移動、復制、備份和恢復。
基本監察服務器(Basic OverSeer Server)進程:這個進程運行於有BOS設定的服務器。它監控和管理運行其他服務的進程並可自動重啟服務器進程,而不需人工幫助。
卷定位服務器(Volume Location Server)進程:該進程提供了對文件卷宗的位置透明性。即使卷宗被移動了,用戶也能訪問它而不需要知道卷宗移動了。
鑒別服務器(Authentication Server)進程:此進程通過授權和相互鑒別提供網絡安全性。用一個“鑒別服務器”維護一個存有口令和加密密鑰的鑒別數據庫,此系統是基於Kerberos的。
保護服務器(Protection Server)進程:此進程基於一個保護數據庫中的訪問信息,使用戶和組獲得對文件服務的訪問權。
更新服務器(Update Server)進程:此進程將AFS的更新和任何配置文件傳播到所有AFS服務器。
備份服務器(Backup Server):維護備份數據庫中的信息並管理卷的備份操作。
緩存管理器(Cache Manager):響應本地應用程序的請求,來跨 AFS 文件系統取出文件。並存放在緩存中。
AFS通
過在客戶端大量開辟文件緩存來提高性能。如果文件是經常更改的源文件,那么文件的幾個復制版本存在於多個客戶端中可能不太好。因為用戶很可能要頻繁地更改
經常被請求的源文件,所以您會遇到兩個問題:首先,文件很可能被保存在客戶機緩存內,而同時還保存在幾個文件服務器機器上的幾個復制卷內;然后,Cache Manager不得不更新所有的卷。文件服務器進程把文件發送到客戶機緩存內並隨其附帶一個回調,以便系統可以處理發生在其他地方的任何更改。如果用戶更改了緩存在其他地方的復制文件,原始文件服務器將會激活回調,並提醒原始緩存版本它需要更新。
分布式版本控制系統也面臨這個經典問題,但是有一點重要的區別:分布式版本控制系統在斷開時可以運行得很好,而 AFS 文件系統的任一部分都不能斷開。斷開的 AFS 部分無法再次與原來的文件系統連接。失效的文件服務器進程必須與仍在運行的 AFS 文件服務器重新同步,但是不能添加可能在它斷開后保存在本地的新更改
AFS還配有一套用於差錯處理,系統備份和AFS分布式文件系統管理的實用工具程序。例如,SCOUT定期探查和收集AFS文件服務器的信息。信息在給定格式的屏幕上提供給管理員。設置多種閾值向管理者報告一些將發生的問題,如磁盤空間將用完等。另一個工具是USS,可創建基於帶有字段常量模板的用戶帳戶。Ubik提供數據庫復制和同步服務。一個復制的數據庫是一個其信息放於多個位置的系統以便於本地用戶更方便地訪問這些數據信息。同步機制保證所有數據庫的信息是一致的。
總結
AFS的優勢:
1.歷史悠久,技術成熟。
2.有較強的安全性(基於Kerberos)。
3.支持單一、共享的名字空間。
4.良好的客戶端緩存管理極大的提高了文件操作的速度。
但以AFS作為機群中的共享文件系統也存在一些問題:
1.消息模型:和NFS一樣,AFS作為早期的分布式文件系統是基於消息傳遞(Message-Based)模型的,為典型的C\S模式,客戶端需要經過文件服務器才能訪問存儲設備,維護文件共享語義的開銷往往很大。
2.性能方面:它使用本地文件系統來緩存最近被訪問的文件塊,但卻需要一些附加的極為耗時的操作,結果,要訪問一個AFS文件要比訪問一個本地文件多花一倍的時間。
3.吞吐能力不足:AFS設計時考慮得更多的是數據的可靠性和文件系統的安全性,並沒有為提高數據吞吐能力做優化,也沒有良好的實現負載均衡;而當今互聯網應用則經常面對海量數據的沖擊,必須提高文件系統的I/O並行度,最大化數據吞吐率。
4.容錯性較差:由於它采用有狀態模型,在服務器崩潰,網絡失效或者其他一些像磁盤滿等錯誤時,都可能產生意料不到的后果。
5.寫操作慢:AFS為讀操作做優化,寫操作卻很復雜,讀快寫慢的文件系統不能提供好的讀、寫並發能力。
6.不能提供良好的異地服務能力,不能良好的控制熱點信息的分布
AFS 的后代
由於一些對新文件系統的嘗試,AFS 已經明顯要退出了。兩個這樣的結合了開發人員從原始分布式文件系統架構中學到的經驗的系統就是:Coda 和瑞典開放源碼志願者的成果 Arla。
Coda 文件系統是改進原始的 AFS 系統的第一次嘗試。1Array87 年在 Carnegie Mellon University,開發人員想要使 Coda 成為對 AFS 的一次自覺的改進,當時 AFS 達到了 V2.0 版本。在上個世紀 80 年代末 Array0 年代初,Coda 文件系統首次發布了一個不同的緩存管理器:Venus。雖然 Coda 的基本功能集與 AFS 的類似,但是 Venus 支持支持 Coda 的客戶機的連續操作,即使客戶機已經從分布式文件系統斷開了。Venus 具有與 AFS Cache Manager 完全相同的功能,即把文件系統任務從內核內部的 VFS 層取出。
從 1ArrayArray3 年起,編程人員就開始開發 Arla,這是一個提供 OpenAFS 的 GPL 實現的瑞典項目,但是大部分的開發都發生在 1ArrayArray7 年以后。Arla 模仿 OpenAFS 模仿得非常好,只是 XFS 文件系統必須運行在所有運行 Arla 的操作系統上。Arla 已經達到 V0.3Array 版本了,而且,就像 OpenAFS 一樣,運行在所有的 BSD 流派、內核 V2.0x 版本以上的許多 Linux 內核以及 Sun Solaris 之上。Arla 確實為 AFS 實現了一個原本不在 AFS 代碼中的功能:斷開操作。但是具體情況可能會不同,開發人員也還沒有完成測試。
至今,AFS及其變種仍然活躍在分布式文件系統的研究和應用領域。
7000 afs3-fileserver Andrew 文件系統(AFS)文件服務器
7001 afs3-callback 用於給緩存管理器回電的 AFS 端口
7002 afs3-prserver AFS 用戶和組群數據庫
7003 afs3-vlserver AFS 文件卷位置數據庫
7004 afs3-kaserver AFS Kerberos 驗證服務
7005 afs3-volser AFS 文件卷管理服務器
7006 afs3-errors AFS 錯誤解釋服務
7007 afs3-bos AFS 基本監查進程
7008 afs3-update AFS 服務器到服務器更新器
7009 afs3-rmtsys AFS 遠程緩存管理器服務
一、安裝GFS軟件包
第一種安裝方法是在安裝centos時,選擇storage clustering組包
第二種方法是用yum 安裝:
#yum groupinstall "Cluster Storage" Cluster -y
配置方法稍后給出
二、配置節點cluster文件
node1、node2如下:
root#vim /etc/cluster/cluster.conf
<?xml version="1.0" ?>
<cluster alias="gfs_cluster" config_version="6" name="gfs_cluster">
<fence_daemon post_fail_delay="0" post_join_delay="3"/>
<clusternodes>
<clusternode name="node1" nodeid="1" votes="1">
<fence>
<method name="1">
<device name="manual_fence" nodename="node1"/>
</method>
</fence>
</clusternode>
<clusternode name="node2" nodeid="2" votes="2">
<fence>
<method name="1">
<device name="manual_fence" nodename="node2"/>
</method>
</fence>
</clusternode>
</clusternodes>
<cman />
<fencedevices>
<fencedevice agent="fence_manual" name="manual_fence"/>
</fencedevices>
<rm>
<failoverdomains/>
<resources/>
</rm>
</cluster>
三、啟動cluster
service cman start
service gfs start
四、格式化GFS文件系統
gfs_mkfs -p lock_dlm -t gfs_cluster:gfs01 -j 4 /dev/sdb9
五、掛載GFS節點
mkdir /gfs
在2台機器上掛載/dev/sdb5到成/ gfs01目錄:
mount -t gfs /dev/sdb9 /gfs
inode與文件描述符 http://www.ruanyifeng.com/blog/2011/12/inode.html http://oss.org.cn/kernel-book/
inode 或i節點是指對文件的索引。如一個系統,所有文件是放在磁盤或flash上,就要編個目錄來說明每個文件在什么地方,有什么屬性,及大小等。就像書本的目 錄一樣,便於查找和管理。這目錄是操作系統需要的,用來找文件或叫管理文件。許多操作系統都用到這個概念,如linux, 某些嵌入式文件系統等。當然,對某個系統來說,有許多i節點。所以對i節點本身也是要進行管理的。
在linux中,內核通過inode來找到每 個文件,但一個文件可以被許多用戶同時打開或一個用戶同時打開多次。這就有一個問題,如何管理文件的當前位移量,因為可能每個用戶打開文件后進行的操作都 不一樣,這樣文件位移量也不同,當然還有其他的一些問題。所以linux又搞了一個文件描述符(file descriptor)這個東西,來分別為每一個用戶服務。每個用戶每次打開一個文件,就產生一個文件描述符,多次打開就產生多個文件描述符,一一對應, 不管是同一個用戶,還是多個用戶。該文件描述符就記錄了當前打開的文件的偏移量等數據。所以一個i節點可以有0個或多個文件描述符。多個文件描述符可以對 應一個i節點。
unix下一切皆文件,系統在后台都為該應用程序分配了一個文件描述符,無論這個文件的本質如何,該文件描述符為應用程序與基礎操作系統之間的交互提供了通用接口。
Unix 操作系統通常給每個進程能打開的文件數量強加一個限制。更甚的是,unix 通常有一個系統級的限制。
當程序用完所有的文件描述符后,它不能接收用戶新的連接。也就是說,用完文件描述符導致拒絕服務
大部分的Linux文件系統(如ext2、ext3)規定,一個文件由目錄項、inode和數據塊組成:
目錄項:包括文件名和inode節點號。
Inode:又稱文件索引節點,包含文件的基礎信息以及數據塊的指針。
數據塊:包含文件的具體內容。
inode包含文件的元信息,具體來說有以下內容:
文件的字節數。
文件擁有者的User ID。
文件的Group ID。
文件的讀、寫、執行權限。
文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。
鏈接數,即有多少文件名指向這個inode。
文件數據block的位置。
可以用stat命令,查看某個文件的inode信息:
stat demo.txt
總之,除了文件名以外的所有文件信息,都存在inode之中。
查看每個inode節點的大小: 由於每個文件都必須有一個inode,因此有可能發生inode已經用光,但是硬盤還未存滿的情況。這時,就無法在硬盤上創建新文件。
[root@250-shiyan ~]# dumpe2fs -h /dev/sda1 | grep "Inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
操作系統只識別inode號
應用程序只識別fd--文件描述符
人識別文件名
內核維護的3個數據結構
進程級的文件描述符表
系統級的打開文件表
文件系統的i-node表
先查看
[root@coreserv ~]# ulimit -n
20480
再修改
[root@coreserv ~]# ulimit -HSn 65536 把ulimit -HSn 65536放到/etc/rc.d/rc.local讓啟動時加載
增加內核文件描述符的限制
# echo 8192 >; /proc/sys/fs/file-max
增加進程文件描述符的限制
# ulimit -Hn 8192
硬鏈接和軟鏈接
硬鏈接
一般情況下,文件名和inode號碼是"一一對應"關系,每個inode號碼對應一個文件名。但是,Linux系統允許,多個文件名指向同一個inode號碼。這意味着,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱為"硬鏈接"(hard link)。
ln命令可以創建硬鏈接,語法為:
ln source_file target_file
運行上面這條命令以后,源文件與目標文件的inode號碼相同,都指向同一個inode。inode信息中有一項叫做"鏈接數",記錄指向該inode的文件名總數,這時就會增加1。反過來,刪除一個文件名,就會使得inode節點中的"鏈接數"減1。當這個值減到0,表明沒有文件名指向這個inode,系統就會回收這個inode號碼,以及其所對應block區域。
這里順便說一下目錄文件的"鏈接數"。創建目錄時,默認會生成兩個目錄項:"."和".."。前者的inode號碼就是當前目錄的inode號碼,等同於當前目錄的"硬鏈接";后者的inode號碼就是當前目錄的父目錄的inode號碼,等同於父目錄的"硬鏈接"。所以,任何一個目錄的"硬鏈接"總數,總是等於2加上它的子目錄總數(含隱藏目錄),這里的2是父目錄對其的“硬鏈接”和當前目錄下的".硬鏈接“。
軟鏈接
除了硬鏈接以外,還有一種特殊情況。文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B的"軟鏈接"(soft link)或者"符號鏈接(symbolic link)。
這意味着,文件A依賴於文件B而存在,如果刪除了文件B,打開文件A就會報錯:"No such file or directory"。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode"鏈接數"不會因此發生變化。
ln -s命令可以創建軟鏈接,語法為:
ln source_file target_file
ln命令中,man-pages里說了一些關於ln與ln -s的區別,軟硬鏈接的不同點
ln *source *target 默認產生一個硬鏈接,
ln -s *source *target 加上參數-s,建立軟鏈接
1、軟鏈接可以跨文件系統,比如你要鏈接一個windows共享文件夾下的某文件至linux里,軟鏈接可以,而硬鏈接不行,硬的只能在一個分區里
2、inode節點問題,硬的不管有多少個,均指向一個inode,每創建一個硬鏈接,會產生一個(大小、權限、inode、時間)一致的文件,並增加1個鏈接數,它們是絕對平等的,可以通過ls -il命令查看詳細的inode和連接數。
軟鏈接,是產生一個很小的具有新inode的文件,有點類似win中的“快捷方式”,它存放的是指向源文件路徑的指針,是個全新的文件
刪除一個硬鏈接,只會減少連接數,直到刪除最后一個連接數為1的文件,就是徹底刪除了此文件
刪除一個軟鏈接文件,無區別。刪除源文件的話,軟連接則指向了一個空文件
3、軟的可以鏈接目錄,而硬的不行
一般我們都是采用軟鏈接的方式給文件鏈接,因為可以跨分區和文件系統。
還有個值得注意的是,不管是修改軟鏈接還是硬鏈接文件,所有的文件都是同步修改的,這是軟硬的共性
http://www.tuicool.com/articles/fiAjIz 多角度分析為什么 Linux 的硬連接不能指向目錄
[root@passport httpsstatic]# ln aa aa3 ln: `aa': hard link not allowed for directory 軟的可以鏈接目錄,而硬的不行 下面這樣的話可以做目錄的鏈接 [root@passport httpsstatic]# ll aa total 8 -rw-r--r--. 2 root root 11 Apr 12 15:12 cs1.txt -rw-r--r--. 1 root root 31 Apr 12 15:12 tt.txt [root@passport httpsstatic]# mkdir bb [root@passport httpsstatic]# mount -o bind aa bb [root@passport httpsstatic]# cd bb [root@passport bb]# ll total 8 -rw-r--r--. 2 root root 11 Apr 12 15:12 cs1.txt -rw-r--r--. 1 root root 31 Apr 12 15:12 tt.txt 通過mount可以看出是bind這個參數起作用, [root@passport httpsstatic]# mount /dev/sda3 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) nfsd on /proc/fs/nfsd type nfsd (rw) 192.168.1.104:/usr/local/httpsstatic/arcgis_js_api on /usr/local/tomcat-web/webapps/supplier/arcgis_js_api type nfs (rw,vers=4,addr=192.168.1.104,clientaddr=192.168.1.104) /usr/local/httpsstatic/aa on /usr/local/httpsstatic/bb type none (rw,bind) 這樣就不用nfs了。刪除的話,先卸載,再刪除 [root@passport httpsstatic]# rm -rf bb rm: cannot remove `bb': Device or resource busy [root@passport httpsstatic]# umount bb [root@passport httpsstatic]# rm -rf bb
inode的特殊作用
由於inode號碼與文件名分離,這種機制導致了一些Unix/Linux系統特有的現象。
1. 有時,文件名包含特殊字符,無法正常刪除。這時,直接刪除inode節點,就能起到刪除文件的作用。
2. 移動文件或重命名文件,只是改變文件名,不影響inode號碼。
3. 打開一個文件以后,系統就以inode號碼來識別這個文件,不再考慮文件名。因此,通常來說,系統無法從inode號碼得知文件名。
第3點使得軟件更新變得簡單,可以在不關閉軟件的情況下進行更新,不需要重啟。因為系統通過inode號碼,識別運行中的文件,不通過文件名。更新的時候,新版文件以同樣的文件名,生成一個新的inode,不會影響到運行中的文件。等到下一次運行這個軟件的時候,文件名就自動指向新版文件,舊版文件的inode則被回收。
實際問題
在一台配置較低的Linux服務器(內存、硬盤比較小)的/data分區內創建文件時,系統提示磁盤空間不足,用df -h命令查看了一下磁盤使用情況,發現/data分區只使用了66%,還有12G的剩余空間,按理說不會出現這種問題。 后來用df -i查看了一下/data分區的索引節點(inode),發現已經用滿(IUsed=100%),導致系統無法創建新目錄和文件。
查找原因:
/data/cache目錄中存在數量非常多的小字節緩存文件,占用的Block不多,但是占用了大量的inode。
解決方案:
1、刪除/data/cache目錄中的部分文件,釋放出/data分區的一部分inode。
2、用軟連接將空閑分區/opt中的newcache目錄連接到/data/cache,使用/opt分區的inode來緩解/data分區inode不足的問題:
ln -s /opt/newcache /data/cache
http://www.blogjava.net/sk8boy/articles/49265.html 使用虛擬內存(virtual memory,VM)文件系統和綁定安裝(轉自ajing的博客)
文件系統駐留在磁盤之上,或者駐留在內存中
內存文件系統使用及示例:ramdisk, ramfs, tmpfs。在Linux中可以將一部分內存mount為分區來使用,通常稱之為RamDisk。
RamDisk有三種實現方式:
第一種就是傳統意義上的,可以格式化,然后加載。這在Linux內核2.0/2.2就已經支持,其不足之處是大小固定,之后不能改變。
另兩種則是內核2.4才支持的,通過Ramfs或者Tmpfs來實現:
它們不需經過格式化,用起來靈活,其大小隨所需要的空間而增加或減少。
為了能夠使用Ramdisk,我們在編譯內核時須將block device中的Ramdisk支持選上,它下面還有兩個選項,一個是設定Ramdisk的大小,默認是4096k;另一個是initrd的支持。
如果對Ramdisk的支持已經編譯進內核,我們就可以使用它了:
查看一下可用的RamDisk,使用ls /dev/ram*
首先創建一個目錄,比如test,運行mkdir /mnt/test;
然后對/dev/ram0 創建文件系統,運行mke2fs /dev/ram0;
最后掛載 /dev/ram0,運行mount /dev/ram /mnt/test,就可以象對普通硬盤一樣對它進行操作了。
ramdisk,使用前需要先創建文件系統,並且調整文件系統大小比較麻煩,需要修改內核引導參數並重新啟動操作系統,在繁雜多變的應用與需要 7X24不間斷運行的系統來說,並不是一個可以接受的選擇.好處是自2.0版本起內核便支持(這也算好處?嗯,確實算,如果你手頭真有這樣的系統的話)
Ramfs顧名思義是內存文件系統,它處於虛擬文件系統(VFS)層,
它無需格式化,可以創建多個,只要內存足夠,在創建時可以指定其最大能使用的內存大小。
如果你的Linux已經將Ramfs編譯進內核,你就可以很容易地使用Ramfs了。創建一個目錄,加載Ramfs到該目錄即可:
# mkdir /testRam
# mount -t ramfs none /testRAM
缺省情況下,Ramfs被限制最多可使用內存大小的一半。可以通過maxsize(以kbyte為單位)選項來改變。
# mount -t ramfs none /testRAM -o maxsize=2000 (創建了一個限定最大使用內存為2M的ramdisk)
ramfs,使用前不需要去創建文件系統了,直接通過mount的方式即可掛載上來用,需要的時候可以使用"mount -o remount,maxsize=..."這種方式來調整大小.
Tmpfs是一個虛擬內存文件系統,它不同於傳統的用塊設備形式來實現的Ramdisk,也不同於針對物理內存的Ramfs。
如果我必須一下子說清楚 tmpfs,我會說 tmpfs 就象虛擬磁盤(ramdisk),但不一樣。象虛擬磁盤一樣,tmpfs 可以使用您的 RAM,但它也可以使用您的交換分區來存儲。而且傳統的虛擬磁盤是個塊設備,並需要一個 mkfs 之類的命令才能真正地使用它,tmpfs 是一個文件系統,而不是塊設備;您只是安裝它,它就可以使用了。
Tmpfs可以使用物理內存,也可以使用交換分區。
在Linux內核中,虛擬內存資源由物理內存(RAM)和交換分區組成,這些資源是由內核中的虛擬內存子系統來負責分配和管理。
Linux 內核的虛擬內存資源同時來源於您的 RAM 和交換分區。內核中的 VM 子系統將這些資源分配到系統中的其它部分,並負責在后台管理這些資源,通常是透明地將 RAM 頁移動到交換分區或從交換分區到 RAM 頁。
Tmpfs向虛擬內存子系統請求頁來存儲文件,它同Linux的其它請求頁的部分一樣,不知道分配給自己的頁是在內存中還是在交換分區中。同Ramfs一樣,其大小也不是固定的,而是隨着所需要的空間而動態的增減。
使用tmpfs,首先你編譯內核時得選擇"虛擬內存文件系統支持(Virtual memory filesystem support)" 。
然后就可以加載tmpfs文件系統了:
# mkdir -p /mnt/tmpfs
# mount tmpfs /mnt/tmpfs -t tmpfs
同樣可以在加載時指定tmpfs文件系統大小的最大限制:
# mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m
tmpfs,同ramfs在表面上基本上一樣啦,不同於ramfs針對"物理內存",tmpfs是在虛擬內存下分配空間的,也就是說tmpfs實例中存儲的文件既可能存在於物理內存中,也可能存在於交換分區中,具體存在哪里,是由"虛擬內存子系統"來調度的.
0,根據需要創建掛載目錄,例:
mkdir -p $DIR_TMP;
1,掛載
mount my_tmpfs $DIR_TMP -t tmpfs -o size=512m
my_tmpfs這個名字需要起,一個標識而已,會出現在df 的Filesytem一列,起個別致點的名字比較容易被自己寫的其它監控腳本找到,如果非要起個none或tmpfs之類的名字的話...反正系統默認掛載的tmpfs都比較喜歡用這兩個名字,好壞自己琢磨吧.
成功以后自己用df 看一下就知道了,寫監控腳本時可以用"df -t tmpfs|grep ^my_tmpfs"來找到這一行.
2,調整
應用中如果感覺不合適,隨時可以用mount命令調整
mount $DIR_TMP -o remount,size=1024m,nr_inodes=100k
nr_inodes為最大節點數,如果你的$DIR_TMP使用df命令查看明明有空間,卻無法創建新文件(例如touch一個新文件),可能是文件節點用到上限了,可以用"df -i"命令來查看,如果是有空間但節點達到上限,就需要用nr_inodes來調整了.
其它可以調整的參數:
mode,uid,gid,uid和gid就不多說了,不知道的回家補基礎,mode也不多說了,取值是3個八進制數字,表示許可權限,不知道這個的也回家...
其它參數,參見mount命令的man page之OPTIONS一節中"-o"參數的說明.
3,卸載
umount $DIR_TMP
4,其它
mount 命令的man page中對tmpfs提及不多,詳細一些的文檔,請參閱內核文檔Documentation/filesystems/tmpfs.txt(內核源代碼目錄內)
