linux 文件系统的管理 (硬盘)
?
RH133—Unit4 文件系統的管理
一、系統在初始化時如何識別硬盤
 1、系統初始時根據MBR的信息來識別硬盤,其中包括了一些執行文件就來載入系統,這些執行文件就是MBR里前面446bytes里的boot loader 程式,而后面的16X4的空間就是存儲分區表信息的位置;如下圖
 2、在分區表中,主要儲存了以下信息:
 (1)分區號,常見的分區號有以下幾種:其它編號可以使用fdisk指令,再執行 l (小寫L) 查看 
| 0x5 (or 0xf) | 擴展分區 | 
| 0x82 | Linux swap | 
| 0x83 | Linux | 
| 0x8e | Linux LVM | 
| 0xfd | Linux RAID auto | 
(2)分區的起始磁柱;
 (3)磁柱的總數;
 所以在系統初始化時,就根據分區表中的這三項信息來識別硬盤。
二、介紹硬盤分區的相關事項
1、當主分區都用完時,可以使用擴展分區來增加額外的分區,這已在前面介紹過了,但是在Linux的kernel里:
 ·IDE的硬盤最多可以支持到16個分區;
 ·SCSI硬盤最多支持15個分區;
 2、硬盤做多分區的好處:如下:
 (1)從控制方面的考慮
 將硬盤分成多個分區,就可以把應用程序、使用者的資料、或是一些需要有安全性的資料,分別放入不同分區中方便管理;
 (2)從效率方面的考慮
 因為硬盤在使用一段時間后,都分有區塊不連續的情況,如果一塊大容量的硬盤沒有劃分成多個小分區,那么硬盤在搜索信息時,因為搜索的范圍非常大,所以會比較久,如果將大容量的硬盤劃分多個小分區,在搜索的時候相對就會快一些;
 (3)為為使用磁盤配額的功能
 因為配額只能對分區做設定,所以我們可以將/home目錄單獨做一個分區,然后可以對這個分區做配額;
 (4)從資料備份和恢復考慮
 例如,/home這個目錄是專門用于存放用戶信息的目錄,將這個目錄單獨設定一個分區,就可以定期就是個分區作備份工作,恢復的時候也比較方便。
三、介紹分區的管理
1、可以使用下面的指令來建立分區及查看分區
fdisk /dev/hda 建立分區??? 
 參數:-l 查看分區
 執行 fdisk 指令后,如下圖:
例1:在新建分區,輸入n,系統會要求輸入起始的磁柱編號,默認系統會指定一個最近的未使用的磁柱號,回車后,再輸入結束的磁柱號,不過根據磁柱號來算一個分區的容量不太方便,可以用“+數值K或+數值M (例:+1000M)” 這樣直接以容量的表示方式來設定,這樣直觀一些;再執行p,就可以看到新增加的分區了;
例2:刪除分區,輸入d,要求輸入要刪除的分區號,在DEVICE字段列可以看到每個分區對應的編號,輸入想要刪除的分區號回車即可
 以前所有操作認為沒有問題,輸入 w ,保存退出即可。
 這時主機屏幕上會提示:
The kernel still uses old table 表示目前系統還是在使用舊的分區表;
The new table will be used at the next reboot.表示只有在下次重新開機后才會使用新的分區表;
 2、使用下面的指令重新載入分區表到kernel中,這樣可以不用重新開機就可以啟用新的分區表。
??? partprobe
四、建立文件系統(對硬盤分區進行格式化)
1、格式化指令及指令語法:
 ??? mke2fs [參數] 要格式化的分區
例如上面的例子中,格式化hda6這個分區 mke2fs /dev/hda6
2、格式化后,會出現一些分區的相關信息,為了理解這些信息,先了解一下分區的格式:
 我們使用fdisk建立的分區,不能直接用來存放資料,必須先對這個分區做格式化的工作,格式化就是將分區劃分成一格一格的block及多少個Inode可以使用,而每個block就是文件系統存取資料的最小單位,所以才可以將資料存放在這些block中,而且每多個 block 會組成一個 group;如下圖所示:除了boot sector 之外,第一個block 稱為 super block 用來記錄這個分區共有多少個block和inode 已經使用;多少block和inode等信息;
 如下圖所示:
 13 block groups :表示這個分區被劃分出了13個block group;
 8192 blocks per group:表示每個group中有8192個block;
 2008 inodes per group:表示每個group中有8192個inodes;
 如果super block 損壞,這個分區將無法訪問,所以每隔一段block 就會備份一次這個super block,如下圖:
 superblock backups stored on block:下面的數值就是備份super block 所在的block的位置。
 3、dumpe2fs 指令查看分區的詳細信息
dumpe2fs /dev/hda6 | more?? 查看指定分區的信息(前一頁半是super block的內容,后面是每個Group的詳細信息),因為所顯示的內容很多所以加上了 | more 用于分頁顯示;
 顯示信息的部分說明:
 Inode count:?? Inode的總數量;
 Block count:??? Block的總數量;
 Free blocks:??? 剩余的block數量;
 Fre inodes:???? 剩余的Inode數量;
 Filesystem features: has_journal表是為ext3文件系統
 4、mke2fs格式化指令格式及參數
 格式:mke2fs [參數] 要格式化的分區文件名(例:/dev/hda6)
 mke2fs -j /dev/hda6 
 參數:
 ·b:設定每個block的大小,預設為1024bytes(1K),最大4096bytes(4K),如果設定太大將使用4096bytes;
 ·c:格式化前檢查分區中是否有損壞的block;
 ·i :設定每個Inode的大小,例:mke2fs –i 4096 /dev/hda6
 ·N:直接設定Inode 的總數量;所設置的值只是接近而矣;
 ·m:設定在分區上,保留多少空間給root,預設保留5%;mke2fs –m 10 /dev/hda6
 ·L:設定分區卷標,預設不設定,通常習慣將卷標名稱設為同掛載點目錄名稱相同方便記憶;mke2fs –L data /dev/hda6
 ·j:建立成為ext3文件系統,也就是加入日志功能;
五、介紹將ext2格式的分區轉成ext3
1、ext2與ext3的區別如下:
 (1)ext2和ext3的格式完全相同,只是在ext3硬盤最后面有一部分空間用來存放Journal(日志)的記錄;
 (2)在ext2中,寫資料到硬盤中時,先將資料寫入緩存中,當緩存寫滿時才會寫入硬盤中;
 (3)在ext3中,寫資料到硬盤中時,先將資料寫入緩存中,鼗緩存寫滿時系統先通知Journal,再將資料寫入硬盤,完成后再通知Journal,資料已完成寫入工作;
 (4)是否有Journal的差別:
 在ext2中,系統開機時會去檢查有效位(Valid bit),如果值為1,表示系統上次有正常關機;如果為0,表示上次關機未正常關機,那系統就會從頭檢查硬盤中的資料,這樣時間會很長;
 在ext3中,也就是有Journal機制里,系統開機時檢查Journal的資料,來查看是否有錯誤產生,這樣就快了很多;
 (5)tune2fs –j /dev/hda6 將ext2轉換成ext3
 2、在ext3里有三個Journal的模式:
 (1)ordered:預設模式,只記錄Inode-table里的信息;
 (2)Journaled:記錄資料本身的信息,需要大量空間來做記錄;
 (3)writeback:不記錄信息,可提供較好的效能;
六、介紹在分區里設定相應的卷標
 1、前面分區的表示法一直在使用 hda1 或 sda1類似這樣的表示法,其實也可以用卷標的表示法,這樣更好便記憶。
 2、設定及查看卷標的指令格式及說明如下:
 ??? e2label 指令:
 例:e2label /dev/hda6?? 查看hda6分區的卷標名稱;如為空白表示未設定卷標;
 ???? e2label /dev/hda6 data 設定這個分區的卷標為 data;
 注:在這里先不要修改hda1~hda5的卷標,可能會造成無法開機,以后再做說明。
七、介紹mount指令掛載分區
 1、掛載的概念:當要使用某個設備時,例如要讀取硬盤中的一個格式化好的分區、光盤或軟件等設備時,必須先把這些設備對應到某個目錄上,而這個目錄就稱為“掛載點(mount point)”,這樣才可以讀取這些設備,而這些對應的動作就是“掛載”。
 mount的詳細說明將在下一小節介紹
 示例如下圖:
 下面以卷標的方式進行掛載,注意:使用卷標掛載進必須加上 –L 的參數表示使用卷標掛載
八、介紹mount指令及參數
1、mount 指令格式:
mount?? [-t 文件系統類型]?? [-o 參數]?? 設備名或卷標?? 掛載點目錄名
 注:如果使用卷標方式掛載,必須使用 –L 參數。
(1)-t 后面設定所要掛載的文件系統的類型,例如:vfat、ext2、ext3、iso9660(光盤),通常這部分不需要加kernel可以自己判斷
 (2)-o 后面加一些設定參數:
 · suid:允許掛載后的文件系統可以使用suid、sgid的特殊權限;
 · dev:允許掛載的文件系統建立設備文件,例如:/dev/hda6 下的 hda6 就是設備文件;
 · exec:允許掛載文件系統后,可以執行里面的執行文件;
 · noexec:不允許執行文件;
 · auto:在電腦開機后自動掛載這個文件系統;
 · nouser:指只允許super user (也就是root)掛載這個文件系統;
 · async:設為不同步,就是電腦寫入資料時先寫入緩存再寫到硬盤中;
 · loop:用來掛載loopback設備,例如光盤機就是loopback設備;
 · ro:掛載文件系統后設定為只讀;
 · rw:掛載文件系統后設定為可讀可寫;
 · remount :重新掛載文件系統;
 如果在掛載ext2或ext3時,預設會使用下面的參數設定:
 rw,suid,dev,exec,nouser,async
九、介紹卸載文件系統
1、使用mount指令查看已掛載了哪些文件系統;
 卸載指令及格式如下:
umount 設備文件名或掛載點
例如:上圖中已掛載到/data目錄的上設備,可以使用 umount /dev/hda6 或 umount /data 進行卸載
 2、如果文件系統正在使用中,就無法正常卸載,可以使用下面的指令查看并停止所有對這個文件系統的操作,然后再進行卸載操作;
fuser -v 設備文件名或掛載點????? 查看有哪個服務或使用者正在對這個文件系統做操作;
fuser –km 設備文件名或掛載點?????? 強制停止所有對這個文件系統的所有操作;
 3、可以使用 remount 這個參數來改變文件系統的狀態;
 例如:mount –o remount,ro /data??? 重新掛載文件系統為只讀,這樣就不用先卸載再掛載了。
十、介紹一些掛載的范例
1、掛載一個不允許執行的文件系統
mount –o noexec /dev/hda6 /data???? noexec表示為不允許執行;
 2、掛載一個文件系統的鏡像文件
mount –t iso9660 -o ro,loop boot.iso /iso????? 加loop參數是因為光盤是loopback設備,boot.iso為鏡像文件名 ,/iso 為掛載點;
十一、介紹掛載網絡上的共享資源
 1、在Unix 和Linux的網絡資源主要分為兩種 NFS (Network File System)和SMB
 ·NFS:Linux/Unix和Unix/Linux之間用來共享資源的;
 ·SMB:Linux/Unix和Microsoft(windows)之間用來共享資源的;
 2、共享NFS網絡資源的主機稱為:NFS Server;
 ??? 共享SMB網絡資源折主機稱為:Samba Server;
 3、這些網絡資源的連接方式:
 (1)NFS部分的連接方式:
showmount –e IP地址??? #查看共享資源
mount ip地址:/共享目錄?? /掛載點?? #掛載網絡資源
 (2)SMB部分的連接方式:
smbclient –L ip地址 -N?? #查看指定Samba Server 上有哪些共享目錄;
mount //IP地址/共享目錄?? /掛載點 -o username=用戶名%密碼??? #掛載windows網絡共享資源;
十二、介紹/etc/fstab 文件的功能
1、fstab文件的功能就是根據fstab文件中設定的內容自動掛載設備到指定的掛載點上;
 2、下面就介紹fstab這個文件內容的詳細說明:
 如下圖:fstab文件內容共分為6個欄位
 下面對上圖中6個欄位分別說明:
 (1)設備名:可以用“LABEL=”卷標表示法,也可以使用設備名稱表示法“/dev/hda6”;
 (2)掛載點:掛載點目錄必須是已存在的目錄;
 (3)文件系統類型:例如ext3,ext2等;
 (4)掛載參數:就是前面mount指令中 –o 后面的參數,defaults代表使用預設參數設定;例如如/dev/hdc(光盤)和/dev/fd0(軟盤)的這兩行設定,exec可以執行文件,noauto 不會自動掛載,
 (5)備份:設定備份次數,0表示不備份,1表示每天做一次備份,2表示每兩天做一次備份;
 (6)檢查順序:設定文件系統的檢查順序,0表示不檢查,1表示第一個檢查,2表示第二個檢查,以此類推檢查順序最多到9,如果值相同,按從上到下的順序檢查,通常根目錄的檢查順序排在第一位;
 所以如果要在電腦開機后自動掛載文件系統就可以修改fstab這個文件的設定。
 例如:可以將前面掛載的hda6寫入這個文件中,當開機后自動掛載,設定方法如下,使用VI編輯fstab文件將下面的一行設定加入到最后一行即可:
/dev/hda6????????? /data???????? ext3??????? defaults?????????? 0?? 0
2、在掛載光盤或軟盤時,只需要執行 mount /media/cdrom 或 mount /media/floppy 就可以了,而不用指定要掛載的設備,這是因為在fstab文件中有所設定,因為在掛載目錄和設備時,如果未指定要掛載的設備,電腦會先到fstab文件中查看,有沒有相對應的設備及目錄掛載,如果沒有還會到mtab文件(其實mtab文件就是目前系統的掛載設定,所以在卸載時也查看這個mtab文件,卸載時也就只需要指定掛載點或設備就可以了)中查看。
十三、介紹auto-mounter自動掛載程序在使用網絡共享時自動掛載網絡共享資源
 1、automounter是一個daemon程式,automounters可以監控某個目錄,例如:監控/mnt/nfs目錄,當我們需要存取這個目錄時,使用cd /mnt/nfs 進入這個目錄時,這時automounter程式發現使用者要存取這個目錄時,就會按照設定自動將網絡共享資源自動進行掛載,如果過一段時間(預設60秒)不使用也會自動卸載這個目錄,這樣可以減少對網絡產生的負荷,使用網絡的利用率更高。
 2、automounter的設定,以實例說明,僅供參考:
 (1)vi /etc/auto.master?? 編輯automount主要的設定文件
 (2)復制有--timeout=60那一行到下面,修改如下圖:
 (3)建立auto.nfs設定文件,預設/etc目錄下沒有這個文件,需要自己建立;
 可以由 auto.misc 做為模板復制得來,并重命名為auto.nfs,編輯auto.nfs修改如下:
 (4)service autofs start?? 啟動automount服務,如果已經啟動可執行service autofs restart 或 service autofs reload重新啟動或重新加載配置文件;
 (5)使用cd /mnt/nfs 目錄,再執行ls 指令沒有未何文件,
 使用 cd server1 卻可以進入,這時已經進行自動掛載了,這時就可以查看NFS服務器上的共享文件了。
 使用mount可以查看到剛剛掛載上來的NFS網絡共享目錄。
注:我這里還未建立NFS文件服務器,所以這里只能做客戶端的設定,現在還無法試測;
十四、介紹在ext2和ext3文件系統里有哪些屬性可以設定
1、在ext2和ext3的文件系統里,都支持一些特殊的屬性來控制文件的特性:
 ·lsattr 指令:顯示文件的屬性設定;
 ·chattr 指令:設定文件的屬性;
 格式:
chattr?? +|-|=屬性[屬性…]?? 文件名[文件名…]
 +:增加屬性
-:去除屬性
 =:設定屬性
 可以設定一個或多個屬性
 常見屬性說明如下:
 ·A:當文件被修改時,atime(存取時間)記錄不會被修改;
 ·a:讓文件只可以附加內容,不允許原來的內容被覆蓋掉;
 ·d:讓系統在使用dump指令做備份時,可以不用備份這個文件;
 ·i:讓文件永遠不改變,不能刪除或更改文件名;
 ·j:讓系統將文件本身的信息記錄在ext3的日志里,就算ext3的文件系統是掛載成ordered(有序)或writeback模式,都會將文件本身的信息記錄在ext3的日志里。
 ·S:當文件被修改時,就做同步的動作,立刻將資料寫入硬盤中;
 例:
chattr +a test?? 添加只允許附加內容的屬性
chattr = test?? 去除掉所有的屬性
十五、介紹如何使用劃分好的分區或文件來當作虛擬內存(swap)
1、在Linux系統中虛擬內存稱為:SWAP;
 2、SWAP分為兩種類型:
 ·用劃分好的分區作為SWAP;
 ·用文件當作SWAP;
 3、要建立SWAP的虛擬內存主要有以下幾個基本設定:
 (1)建立SWAP的分區或是文件,并且在建立SWAP的分區時分區的編號要設定為82;
 (2)使用mkswap指令對swap分區或是swap文件寫入一個特定的SWAP識別標志;
 (3)必須要在/etc/fstab文件中加入適當的記錄,這樣才能讓系統在開機后能夠自動掛載SWAP;
 (4)如果是SWAP的分區,要使用 swapon –a 指令啟用SWAP,其實 swapon –a 指令會去讀取 fstab 文件,并根據 fstab 里的記錄,來啟用所有的 swap 分區;
 (5)如果是使用SWAP文件,則使用 swapon 指令再指定要啟用哪個SWAP文件;
 (6)可以使用 swapon –s 來檢查SWAP的使用情況;
范例1如下:
 (1)使用分區作為SWAP
 ·fdisk /dev/hda
 ·輸入n;新建一個分區,如果一直以前面的例子做下來,硬盤應該還有剩余空間的,這里創建一個100M的分區;
 ·輸入t;再輸入7(我這里新建的分區是hda7,可以輸入p查看到);再輸入 82 (82表示設定為swap分區類型);
 ·再輸入p;可以查看到 hda7 的system(系統)已經變為Linux swap
 ·wq:保存退出;
 ·執行“partprobe”指令,讓kernel重新讀取分區表;
 (2)mkswap /dev/hda7?? 對SWAP分區或是SWAP文件寫入特定的標志;類似于格式化成虛擬內存的格式;
 (3)編輯/etc/fstab文件添加記錄,這樣一會的swapon指令才可以在fstab文件中找到相應的分區,在下次開機時也可以找到新的SWAP分區的位置;復制原來的SWAP那行記錄,將原來的卷標表示法修改為/dev/hda7的設備表示法,其它保持不變;
 (4)swapon –a 指令,根據fstab文件啟動所有SWAP分區;為了驗證可以先使用 swapon –s 指令查看當前SWAP的狀態;
范例2如下:使用文件當虛擬內存這和windows下的虛擬內存使用方式非常相似
(1)建立SWAP文件,這里建立的是100M的SWAP文件
 指令:dd if=/dev/zero of=/swapfile bs=1M count=100
 說明:dd:轉換并復制文件;
 ??????? if:是inputfile的縮寫,if=/dev/zero 代表要把zero文件當作輸入的文件,zero文件可以是當作都是零的文件;
 ??????? of:是outputfile的縮寫,of=/swapfile 代表要輸入到/swapfile文件上;
 ??????? bs:是block size的縮寫,表示強制設定swapfile的block的大小;
 ??????? count:代表要建立多少個block;
 (2)mkswap /swaplife?? 為swapfile文件寫入一個swap的標志,相當于格式化成虛似內存的格式;設定成功將會出現提信息;
 (3)修改 /etc/fstab文件,方式同上一范例相同,只是把 /dev/hda7改寫成 /swapfile ,其它不變;
 (4)swapon –a 啟用swap文件
 在啟用前也可以用 swapon –s 查看,等啟用后再次查看SWAP是否加載進來了。
十六、介紹一些維護文件系統的工具及一些重要的相關事項
1、如果文件系統的文件有丟失或毀損,可以使用fsck指令來維護文件系統的一致性:
 檢查某個分區前,分區必須處于未掛載狀態,如正在使用中,必須先進行卸載,再執行檢查工作;
 格式: fsck -Y /dev/hda6????? -Y參說表示中途提示問題都回答Yes;
 2、系統在開機時就會檢查文件有沒有丟失或損壞的,系統是根據/etc/fstab文件中最后一欄的設定來決定檢查的先后順序的,這個欄位前面已做過介紹;
 3、如果檢查出有問題文件,就會先放到 lost+found 目錄中當作備分;所以當一個分區掛載成功后都會發現有這個目錄存在;
 4、電腦在開機時,發生嚴重錯誤,系統會用sulogin的方式啟動,下圖例中我將fstab文件中根目錄的卷標隨意的修改了一下,重新啟動后將會出現嚴重錯誤,就停在了下圖圖的位置:
 5、將ext2文件系統轉成ext3文件系統,指令下如:
tune2fs -j /dev/hda6 將hda6分區轉成ext3文件系統,轉換成功后將有提示信息;這樣原有分區內的資料將不會丟失;
 6、查看文件系統目前的狀態信息
dumpe2fs -h?? /dev/hda6??? 顯示hda6的分區信息,這個指令前面已介紹過;
 -h?? 可以顯示superblock的信息
十七、如何加入一塊新硬盤
1、第一步當然是要將硬盤接在電腦上啦;
 2、進入系統后,使用fdisk對硬盤進行分區,并設定好分區類型編號;例如:linux 為 83
 3、建立好分區后,執行 patrprobe 重新載入分區,使用最新分區表;
 4、建立完分區后,格式化分區,如果建立的是SWAP分區,需要為這個SWAP分區寫入一個SWAP標志;
 5、如果要使用卷標表示法,需要為分區創建卷標名稱;
 6、建立新的掛載點,并將分區掛載上;
 7、在/etc/fstab文件中加入新分區的記錄,讓電腦以后可以自動掛載這個新建的分區;
轉載于:https://blog.51cto.com/luashin/809872
總結
以上是生活随笔為你收集整理的linux 文件系统的管理 (硬盘)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 可视化WEB开发 -资料收集
 - 下一篇: 飞机大战php 源码,飞机大战资源素材及