linux檔案系統簡析

餘二五發表於2017-11-15
什麼是檔案系統?
    檔案系統是基於作業系統的。用來管理和組織儲存在磁碟驅動器上的資料的系統軟體。通過對資料儲存佈局,檔案命名,安全控制等方面的管理。解決了如何在裝置上有效的儲存資料。
    後設資料(metadata)儲存檔案的重要資訊(檔案的許可權,大小,修改時間,屬主,儲存位置等)
    檔案系統是作業系統和硬碟之間 一個橋樑,對磁碟的寫操作,都要經過檔案系統,然後才到磁碟。
    常見的檔案系統:
        DOS系統的msdoc    
        windows 下的FAT系統(fat16(最大支援2G)和fat32(最大支援4G))和NTFS檔案系統
        光碟檔案系統 ISO-9660
        linux 下 單一檔案系統 ext2  和日誌檔案系統 ext3/ext4/xfs
        叢集檔案系統 gfs (Red Hat Global File System)
        虛擬檔案系統 (/proc)  
        加密檔案系統 (CFS)
        網路檔案系統(NFS)
 linux標準檔案系統是從VFS開始的,然後是ext2。ext3,ext4
    ext系列的對比:
        ext3是在ext2的基礎上增加了日誌形式(便於資料恢復)這一思想來源於:超級塊和inode設計理念。
        ext3是一種日誌式的檔案系統,在ext2的基礎上加入特殊的inode(日誌檔案)。日誌記錄功能,用於記錄檔案系統的後設資料或各種寫操作的變化。ext3資料的寫入順序;先通過日誌檔案的記錄功能,然後在將資料寫入磁碟的最終位置。
        ext4 是linux第四代日誌檔案系統。是ext3檔案系統的後續版本。比較ext3的改進:(centos6下的預設檔案系統)
         1.支援更多的子目錄數量(ext3支援32000個子目錄)ext4,理論上支援無限數量子目錄
         2.支援更大的檔案系統和更大的檔案(ext3 持續賀詞32TB的檔案系統和2TB的檔案,而ext4 容量可達1EB,檔案容量增至16TB)
    XFS檔案系統:
        XFS檔案系統是SGI(美國矽圖公司)開發的一個高階日誌檔案系統。centos7下作為預設檔案系統(centos7 下構架全部是64位了)
        檔案系統格式化命令mkfs.xfs
        # mkfs.xfs -f /dev/sda2    (由於sda2已經完成格式化了。需要-f  強制重新格式化)
            meta-data=/dev/sda2              isize=512    agcount=4, agsize=1525824 blks
                     =                       sectsz=512   attr=2, projid32bit=1
                     =                       crc=1        finobt=0, sparse=0
            data     =                       bsize=4096   blocks=6103296, imaxpct=25
                     =                       sunit=0      swidth=0 blks
            naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
            log      =internal log           bsize=4096   blocks=2980, version=2
                     =                       sectsz=512   sunit=0 blks, lazy-count=1
            realtime =none                   extsz=4096   blocks=0, rtextents=0
        檔案系統一致性檢測命令:
            xfs_repair -n /dev/sda2 (-n 只是測試不是修復)
        修復和監測要把分割槽解除安裝了。
        這裡出現啟動問題: 
        A start job is running for dev-disk-byx2duuid-…..device(1min 1min 30)
        然後是時間超時
        然後出現提示: [DEPEND] DEpendency failed for /data
        不過 centos7下。的init系統還是比較好的。沒有直接拒絕登入系統而是給了修復資訊。
        Give root passwd for maintenance (輸入root密碼進入修復)
        (or type Control-D to continue):(這種一般是檔案系統啟動的錯誤。系統嘗試自動修復檔案系統)
        前面 由於出現提示是/data掛載不了。還是先進入系統看下/etc/fstab
        先檢視 分割槽的UUID; # blkid
        然後檢視 /ect/fstab 
        對比發現: /data的UUID 有問題。
        修改 /data 的UUID 
        重啟,正常。
    檔案系統使用的差異
        1.讀操作頻繁,小檔案非常多(web應用,郵件應用) ext 4 檔案系統比較好。ext4支援更多目錄和檔案
        2.寫操作頻繁。(需求日誌功能)xfs 檔案系統較好。(在高併發下:xfs比ext4 省CPU資源)
        3.對效能和安全都要求不高。可以用ext2 。(沒有日誌記錄功能,可以省去裝置開銷)
    NFS 網路檔案系統的
        功能:
            讓網路上的不同作業系統之間共享資料。NFS首先在遠端服務端(共享資料的作業系統)共享出檔案或者目錄,然後遠端
        共享出來的檔案或者目錄,可以通過掛載的方式接到本地的不同系統上。
        實現原理:NFS server啟動後,開啟一個埠為客戶端連線。由於這個埠每次都不一樣,NFS檔案系統通過rpc(remote procedure call)
        遠端過程呼叫,監聽NFS守護程式的埠號,通知給客戶端。
        nfs需要2個系統服務。 
        portmap;RPC的portmap 管理器,管理RPC服務的連線
        nfs-utils: 提供 rpc.nfsd 及prc.mountd 這2個 nfs (daemons)的系統服務。
            其中:rpc.nfsd 是管理客戶端是否有許可權登入伺服器。rpc.mountd 是管理認證後的客戶端是否對檔案有使用權。
                簡單點就是: rpc.nfsd 處理連線請求  rpc.mountd 監督是否有許可權操作目錄。
        nfs是 c/s架構。
        NFS 伺服器端 安裝 需要 rpcbind 和 nfs 包
            centos7下一般預設安裝了。現在檢查下:
            # rpm -qa | grep rpcbind
            rpcbind-0.2.0-38.el7.x86_64
            # rpm -qa | grep nfs
            nfs-utils-1.3.0-0.33.el7.x86_64
            libnfsidmap-0.25-15.el7.x86_64
        主配置檔案: /etc/exports
        新增一條語句:/app 192.168.1.140(rw,sync,no_root_squash)
        在新增的時候vim 不允許儲存。顯示 read_only file system
        解決方法:mount -o remount,rw /(重新掛載/分割槽為可讀寫)
        格式:共享資源路徑 [主機地址][選項]
        格式解析:
      共享資源路徑:就是要共享出來的目錄或者磁碟分割槽。這些目錄存在於NFS Server端,以供NFS Client掛載使用。
        主機地址:設定允許使用NFS Server共享資源的客戶端主機地址,主機地址可以是主機名、域名、IP地址等,支援匹配。
        選項:下面是可用的各個選項含義:
        ro: 即為:read only,也就是客戶端主機對共享資源僅僅有讀許可權。
        rw: 即為:read write,也就是客戶端主機對共享資源有讀、寫許可權。
        no_root_squash: 信任客戶端,根據使用者UID進行判斷,如果登入到NFS主機的使用者是ROOT,那麼此使用者就擁有對共享資源的最高許可權。此引數很不安全,建議不要使用。
         root_squash:系統預設值,當登入NFS主機的使用者root時,那麼這個使用者的許可權將被縮成為匿名使用者,也就是它的UID與GID都會變成nfsnobody身份;只有可讀許可權,例如客戶端使用者以UID,GID)=(0,0)的身份使用共享目錄時,其身份就被轉換為(UID,GID)=(65534,65534) 也就nfsnobody這個使用者身份。系統以此為預設值,顯然是為了安全考慮。
        all_squash:不管登陸NFS主機的是什麼使用者,都會將共享檔案的UID和GID對映為匿名使用者nfsnobody。
        no_all_squash:系統預設值,保留共享檔案的UID和GID預設許可權。也就是客戶端使用者的UID以及GID和服務端共享檔案UID和GID相同時,才有對共享檔案的讀寫許可權。這種選項保證了共享檔案的使用者和組許可權不會改變。
        anonuid:將登入NFS主機的使用者都設定成指定的UID,此UID必須存在於NFS Server端/etc/passwd中。
        anongid:與“anonuid”含義類似,但是變成 GID了,即使用者組ID! 
        sync:資料同步寫入磁碟中。預設選擇。 
        async:資料會先暫時存放在記憶體中,不會直接寫入硬碟。 
 開啟NFS服務
        # systemctl start nfs
        # systemctl start rpcbind
        exportfs 命令可以臨時生效一條策略。系統不重啟,就不會生效。
 客戶端:
            安裝 rpcbind 和 nfs-utils
            啟動服務: service  rpcbind start
        檢視nfs伺服器提供了哪些服務:
            showmount -a ip 
            檢視nfs主機資訊
            showmount -e ip
            檢視nfs主機和目錄資訊
    如何使用NFS: 在客戶端掛載nfs伺服器共享的目錄
    # mkdir /app
          # mount -t nfs 192.168.1.152:/app /app
          (需要關閉伺服器埠的防火牆 systemctl stop firewalld.service )
    NFS應用便捷場景:檔案備份。
    需要備份的檔案為客戶端。粗放備份檔案的客戶端為nfs伺服器。
    直接在掛載目錄下。tar 需要複製的檔案。
本文轉自 swallow_zys  51CTO部落格,原文連結:http://blog.51cto.com/12042068/1898605,如需轉載請自行聯絡原作者


相關文章