<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 練習 20:文件系統:修改和創建文件系統,`tune2fs`,`mkfs` > 原文:[Exercise 20. Filesystems: modifying and creating filesystems, tune2fs, mkfs](https://archive.fo/CzHiN) > 譯者:[飛龍](https://github.com/wizardforcel) > 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) > 自豪地采用[谷歌翻譯](https://translate.google.cn/) 讓我來介紹一下文件系統相關的術語: + [文件系統](http://en.wikipedia.org/wiki/File_system) - 一種組織數據的方式,通過提供存儲,檢索和更新數據的過程,以及管理包含它的設備上的可用空間,數據預期在終止后保留。 + Inode - 索引節點是一種結構,存儲文件系統對象(文件,目錄等)的所有信息,除數據內容和文件名之外。 + 塊 - 可以分配的最小塊磁盤空間。它通常默認為 4096 字節,或 4 千字節。 + 日志 - 一種結構,允許文件系統跟蹤什么時候寫入了什么。這樣可以快速了解在斷電或類似問題時,未正確寫入的內容。 接下來,讓我給大家簡要介紹文件系統的工作原理。為了按名稱訪問文件,Linux 內核將: + 在包含該文件的目錄中查找文件名。 + 獲取文件 Inode 號。 + 通過 Inode 區域中的數字查找 Inode。 + 讀取此 Inode 的數據塊的位置。 + 使用這個位置在數據區域中從這個塊讀取文件。 現在,每個文件系統都有很多與之相關的選項。這些選項可以通過`tune2fs `程序查看和更改。這是一個帶注解的`tune2fs -l /dev/sda8`的輸出: ``` user1@vm1:~$ sudo tune2fs -l /dev/sda8 tune2fs 1.41.12 (17-May-2010) # 只是個標簽,可以是任何東西,或者沒有東西 Filesystem volume name: <none> # 這里應該是最后的掛載點 Last mounted on: <not available> # 唯一的文件系統標識符 Filesystem UUID: 869db6b4-aea0-4a25-8bd2-f0b53dd7a88e # 已知位置的特殊數字,它定義了 FS 的類型,嘗試這個: # sudo dd if=/dev/sda8 of=/dev/stdout bs=1 skip=1080 count=2 | hexdump -C Filesystem magic number: 0xEF53 # FS 版本 Filesystem revision #: 1 (dynamic) # 啟用的 FS 功能 Filesystem features: # 這是一個日志文件系統。日志文件系統是一個文件系統, # 它跟蹤日志中發生的變化(通常是一個循環日志, # 在文件系統的特定位置),在提交給主文件系統之前。 # 在系統崩潰或者斷電的事件中,這種文件系統能夠更快 # 恢復,并且不可能毀壞。 # http://en.wikipedia.org/wiki/Journaling_file_system has_journal # 擁有擴展屬性,例如擴展的 ACL。 ext_attr # 為系統信息保留空間,這允許 FS 改變大小。 resize_inode # 使用索引來加速大目錄中的查找。 dir_index # 在目錄條目中儲存文件類型信息。 filetype # 意思是需要運行 fsck。 needs_recovery # 更少的超級塊備份,在大 FS 上節約空間。 sparse_super # 是否可以包含 > 2GB 的文件。在創建 >2GB 的文件時,內核會自動設置它。 large_file # dir_index 中使用哪個哈希 Filesystem flags: signed_directory_hash # 掛載時使用什么選項 Default mount options: (none) # 是否需要執行 fsck Filesystem state: clean # 錯誤時做什么:繼續,以只讀方式重新掛載,或者報錯? Errors behavior: Continue # 哪個 OS 使用這個 FS Filesystem OS type: Linux # 索引節點總數。索引節點就是 "inode"。它的結構是: # 儲存所有文件系統對象(文件、目錄,以及其他)的信息 # 除了文件內容和文件名稱。也就是說, # 你的文件數量不能多于索引節點數量。 # 這就是索引節點結構,它描述了里面儲存了什么信息: #/* 出現在 Inode 表中的 Inode 結構 */ #struct dinode #{ ushort di_mode; /* mode and type of file */ # short di_nlink; /* number of links to file */ # ushort di_uid; /* owner's user id */ # ushort di_gid; /* owner's group id */ # off_t di_size; /* number of bytes in file */ # char di_addr[39]; /* disk block addresses */ # char di_gen; /* file generation number */ # time_t di_atime; /* time last accessed */ # time_t di_mtime; /* time last modified */ # time_t di_ctime; /* time created */ #}; # 這里也有很好的解釋: # http://support.tux4u.nl/dokuwiki/lib/exe/fetch.php?media=linux:disk_bestandssysteem:inode.pdf Inode count: 62464 # 當前有多少空閑節點 Free inodes: 62452 # 設備上的第一個塊。由于每個分區都表示為單獨的設備, # 它設為 0。 First block: 0 # 這是文件系統中,第一個索引節點的節點號。 First inode: 11 # 索引節點的大小,以字節為單位。在新的 Linux 發行版中,這有時會默認增加, # 為了允許文件中擴展屬性的存儲,例如,微秒時間戳。 Inode size: 256 # 添加索引節點字段所需的空間 Required extra isize: 28 # 添加索引節點字段要求的空間。不重要,因為這個大小 # 任何時候都是所需空間 Desired extra isize: 28 # 一個隱形節點,它儲存文件系統的日志。 Journal inode: 8 # 塊的總數。塊是磁盤空間可分配的最小單位。 # 你可以使用下面的公式,以 GB 計算分區大小: # 塊的數量 * 塊的大小 # ------------------------ # 1024^3 Block count: 249856 # 有多少塊為超極用戶保留。普通用戶不能使用這個 # 保留空間。這是為了使系統保持運行,以防一些流氓軟件 # 決定塞滿所有可用的磁盤空間。 Reserved block count: 12492 # 當前有多少塊是空閑的。 Free blocks: 241518 # 用于目錄索引(dir_index)的算法。 Default directory hash: half_md4 # 目前為止,我可以說,這是用于 dir_index 哈希算法的種子值。 Directory Hash Seed: d02c6099-bd06-4d29-a3d7-779df2aa2410 # 日志備份選項。 Journal backup: inode blocks # # 塊的大小,以字節為單位。4096 字節就是 4 KB。 Block size: 4096 # 在 ex3 FS 中未實現。這是一個特性,它能夠在一個塊中寫入多個小文件, # 來節約空間。 Fragment size: 4096 # 保留的控件,所以組描述符表可能在未來會增長。 Reserved GDT blocks: 60 # 每個塊組的塊數量。塊組包含文件系統重要的控制信息的冗余副本。 # (超級塊和文件描述符),并包含一部分文件系統contains a # (塊的位圖,索引節點的位圖,一部分索引節點表,以及數據塊)。 # 塊組的結構在下表中展示: #,---------+---------+---------+---------+---------+---------, #| 超級 | FS | 塊的 | Inode | Inode | 數據 | #| 塊 | 描述符 | 位圖 | 位圖 | 表 | 塊 | #`---------+---------+---------+---------+---------+---------' # http://tldp.org/HOWTO/Filesystems-HOWTO-6.html Blocks per group: 32768 # 每個組的片段數量。因為 ext3 FS 中沒有片段, # 這等于每個組的塊數量。 Fragments per group: 32768 # 每個組的索引節點數量。 Inodes per group: 7808 # 每個組的索引節點塊。索引節點塊是一個表的索引, # 描述了所有文件屬性,除了文件名稱。它擁有數據塊的索引。 # 數據塊包含文件真實內容。 # http://www.porcupine.org/forensics/forensic-discovery/chapter3.html Inode blocks per group: 488 # FS 的創建時間。 Filesystem created: Mon Jul 2 06:16:24 2012 # 最后的 FS 掛載時間。 Last mount time: Mon Jul 2 06:57:21 2012 # 最后的 FS 寫入時間。 Last write time: Mon Jul 2 06:57:21 2012 # FS 的掛載次數。 Mount count: 6 # 自動檢查前的次數。如果文件系統的掛載次數是這個 # 或者檢查間隔到了,那么 FS 會自動檢查。 Maximum mount count: 34 # 最后的 fsck 執行時間 Last checked: Mon Jul 2 06:16:24 2012 # 下一個 FS 檢查間隔. 如果這個間隔到了, # 或者到達了最大掛載數,FS 會自動檢查。 Check interval: 15552000 (6 months) # 下一個 FS 檢查間隔,以人類可讀的格式。 Next check after: Sat Dec 29 05:16:24 2012 # 能夠使用保留空間的用戶的用戶 ID。 # 它默認是 root 用戶(超級用戶) Reserved blocks uid: 0 (user root) # 能夠使用保留空間的用戶的組 ID。 # 它默認是 root 組 Reserved blocks gid: 0 (group root) ``` 很可怕,是嘛?實際上你會發現,這個描述中只有幾個參數實際上是有用的,它們是: + 保留塊數量。 + 最大掛載數。 + 檢查間隔。 通常你不需要修改其他參數,默認情況下它們是正常的。以下是使用文件系統的命令列表: + `mkfs.ext3` - 創建一個`ext3`文件系統。如果在具有現有文件系統的設備上執行此命令,則該文件系統將被銷毀,因此請小心。 + `mkfs.ext4` - 創建一個`ext4`文件系統。這其實是相同的程序,嘗試`sudo find /sbin -samefile sbin/mkfs.ext3`。 + `tune2fs` - 打印并更改文件系統參數。 現在,你將學習如何創建新的文件系統并修改其參數。 ## 這樣做 ``` 1: sudo -s 2: umount /tmp 3: blkid | grep /dev/sda8 4: mkfs.ext3 /dev/sda8 5: blkid | grep /dev/sda8 6: blkid | grep /dev/sda8 >> /etc/fstab 7: vim /etc/fstab ``` 現在你必須將`/tmp`那一行的 UUID。 ``` # /tmp was on /dev/sda8 during installation UUID=869db6b4-aea0-4a25-8bd2-f0b53dd7a88e /tmp ext3 defaults 0 2 ``` 替換為你添加到文件末尾的那個: ``` /dev/sda8: UUID="53eed507-18e8-4f71-9003-bcea8c4fd2dd" TYPE="ext3" SEC_TYPE="ext2" ``` 因為根據定義,你的 UUID 必須跟我的不同。在替換 UUID,編寫文件,退出之后,繼續并輸入: ``` 8: mount /tmp 9: tune2fs -c 2 /dev/sda8 10: unmount /tmp 11: fsck /tmp 12: for ((i=1;i<=4;i++)); do mount /tmp ; umount /tmp ; cat /var/log/messages | tail -n 4 ; done 13: fsck /tmp 14: mount -a ``` ## 你會看到什么 ``` user1@vm1:~$ sudo -s root@vm1:/home/user1# umount /tmp root@vm1:/home/user1# blkid | grep /dev/sda8 /dev/sda8: UUID="869db6b4-aea0-4a25-8bd2-f0b53dd7a88e" TYPE="ext3" SEC_TYPE="ext2" root@vm1:/home/user1# mkfs.ext3 /dev/sda8 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 62464 inodes, 249856 blocks 12492 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=255852544 8 block groups 32768 blocks per group, 32768 fragments per group 7808 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 28 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. root@vm1:/home/user1# blkid | grep /dev/sda8 /dev/sda8: UUID="53eed507-18e8-4f71-9003-bcea8c4fd2dd" TYPE="ext3" SEC_TYPE="ext2" root@vm1:/home/user1# blkid | grep /dev/sda8 >> /etc/fstab root@vm1:/home/user1# vim /etc/fstab # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 # / was on /dev/vda5 during installation UUID=128559db-a2e0-4983-91ad-d4f43f27da49 / ext3 errors=re # /home was on /dev/vda10 during installation UUID=32852d29-ddee-4a8d-9b1e-f46569a6b897 /home ext3 defaults # /tmp was on /dev/sda8 during installation UUID=869db6b4-aea0-4a25-8bd2-f0b53dd7a88e /tmp ext3 defaults # /usr was on /dev/vda9 during installation UUID=0221be16-496b-4277-b131-2371ce097b44 /usr ext3 defaults # /var was on /dev/vda8 during installation UUID=2db00f94-3605-4229-8813-0ee23ad8634e /var ext3 defaults # swap was on /dev/vda6 during installation UUID=3a936af2-2c04-466d-b98d-09eacc5d104c none swap sw /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/sda8: UUID="53eed507-18e8-4f71-9003-bcea8c4fd2dd" TYPE="ext3" SEC_TYPE 22,1 Bot # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 # / was on /dev/vda5 during installation UUID=128559db-a2e0-4983-91ad-d4f43f27da49 / ext3 errors=re # /home was on /dev/vda10 during installation UUID=32852d29-ddee-4a8d-9b1e-f46569a6b897 /home ext3 defaults # /tmp was on /dev/sda8 during installation UUID=53eed507-18e8-4f71-9003-bcea8c4fd2dd /tmp ext3 defaults # /usr was on /dev/vda9 during installation UUID=0221be16-496b-4277-b131-2371ce097b44 /usr ext3 defaults # /var was on /dev/vda8 during installation UUID=2db00f94-3605-4229-8813-0ee23ad8634e /var ext3 defaults # swap was on /dev/vda6 during installation UUID=3a936af2-2c04-466d-b98d-09eacc5d104c none swap sw /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 "/etc/fstab" 22L, 1277C written root@vm1:/home/user1# mount /tmp root@vm1:/home/user1# tune2fs -c 2 /dev/sda8 tune2fs 1.41.12 (17-May-2010) Setting maximal mount count to 2 root@vm1:/home/user1# unmount /tmp root@vm1:/home/user1# fsck /tmp fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) /dev/sda8: clean, 11/62464 files, 8337/249856 blocks (check in 2 mounts) root@vm1:/home/user1# for ((i=1;i<=4;i++)); do mount /tmp ; umount /tmp ; cat /var/log/messages | tail -n 4 ; done Jul 2 12:11:43 vm1 kernel: [21080.920658] EXT3-fs: mounted filesystem with ordered data mode. Jul 2 12:11:58 vm1 kernel: [21096.363787] kjournald starting. Commit interval 5 seconds Jul 2 12:11:58 vm1 kernel: [21096.364167] EXT3 FS on sda8, internal journal Jul 2 12:11:58 vm1 kernel: [21096.364171] EXT3-fs: mounted filesystem with ordered data mode. Jul 2 12:11:58 vm1 kernel: [21096.364171] EXT3-fs: mounted filesystem with ordered data mode. Jul 2 12:11:58 vm1 kernel: [21096.381372] kjournald starting. Commit interval 5 seconds Jul 2 12:11:58 vm1 kernel: [21096.381539] EXT3 FS on sda8, internal journal Jul 2 12:11:58 vm1 kernel: [21096.381542] EXT3-fs: mounted filesystem with ordered data mode. Jul 2 12:11:58 vm1 kernel: [21096.396152] kjournald starting. Commit interval 5 seconds Jul 2 12:11:58 vm1 kernel: [21096.396158] EXT3-fs warning: maximal mount count reached, running e2fsck is recommended Jul 2 12:11:58 vm1 kernel: [21096.396344] EXT3 FS on sda8, internal journal Jul 2 12:11:58 vm1 kernel: [21096.396348] EXT3-fs: mounted filesystem with ordered data mode. Jul 2 12:11:58 vm1 kernel: [21096.412434] kjournald starting. Commit interval 5 seconds Jul 2 12:11:58 vm1 kernel: [21096.412441] EXT3-fs warning: maximal mount count reached, running e2fsck is recommended Jul 2 12:11:58 vm1 kernel: [21096.412610] EXT3 FS on sda8, internal journal Jul 2 12:11:58 vm1 kernel: [21096.412612] EXT3-fs: mounted filesystem with ordered data mode. root@vm1:/home/user1# fsck /tmp fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) /dev/sda8 has been mounted 4 times without being checked, check forced. Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sda8: 11/62464 files (0.0% non-contiguous), 8337/249856 blocks root@vm1:/home/user1# mount -a root@vm1:/home/user1# ``` ## 解釋 1. 執行 root(超級用戶)shell。 1. 解除掛載`/tmp`,從`/etc/fstab`讀取它的位置 。 1. 打印出`/dev/sda8`的UUID,`/dev/sda8`是掛載在`/tmp`上的文件系統。 1. 在`/dev/sda8`上創建一個新的文件系統。 1. 再次打印出`/dev/sda8`的 UUID,注意如何變化,因為你創建了一個新的文件系統。 1. 將此 UUID 附加到`/etc/fstab`。 1. 打開`/etc/fstab`進行編輯。 1. 掛載新創建的文件系統。這實際上是一個檢查,是否你已經正確替換了 UUID,如果不是會有一個錯誤消息。 1. 設置每兩次掛載檢查`/dev/sda8`。 1. 解除掛載`/dev/sda8`。 1. 檢查`/dev/sda8`。 1. 掛載,接觸掛載`/dev/sda8`, 并連續四次向你展示`/var/log/messages/`的最后4 行。請注意,從第三次開始,掛載系統通知你 需要運行`e2fsck`。如果你重新啟動系統,它將為你運行`e2fsck`。 1. 檢查`/dev/sda8`。`fsck`確定文件系統類型并自動調用`e2fsck`。 1. 掛載所有文件系統。如果沒有錯誤,你已經完成了這個練習。 ## 附加題 + 閱讀`man mkfs`,`man mkfs.ext3`,`man tune2fs`。 + 閱讀頁面頂部的`tune2fs -l`列表,并為你的所有文件系統讀取幻數。 + 手動計算文件系統的大小,使用在`tune2fs -l`列表的塊描述中提供的公式。 + 閱讀這個幻燈片,并完成它展示的東西:<http://mcgrewsecurity.com/training/extx.pdf>。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看