一、系統在初始化時如何識別硬盤
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文件中加入新分區的記錄,讓電腦以后可以自動掛載這個新建的分區;