8.1.1、Linux檔案系統存儲空間分為(資料區和中繼資料區),一般硬碟扇區是512位元組,一個block(塊)可以包含(2、4、8不同扇區),一個塊隻能屬于一個檔案但一個檔案可以包含多個塊,stat可以檢視中繼資料(檔案名,大小,時間戳,權限,屬主、屬組,對應資料存儲在哪些磁盤塊上),ls -i可以檢視檔案的inode編号,每個編号又對應着磁盤上的存儲區域,但是檔案名并不存放在inode上而是存放在上級目錄中是以目錄資料區中存放的是檔案名和inode對應關系
8.1.2、因為inode編号太多查找該inode是否使用比較消耗資源,為了更快的查找到未使用的inode會對inode做索引這叫bitmap(位圖索引)inode位圖,相對應的塊也會做block bitmap(塊位圖),是以中繼資料區中存放了(inode、ionde bitmap、block bitmap),資料存儲方式:每次會拿8個未使用的磁盤塊用來存儲,如果隻用了一個會把未使用的塊還回去不夠時在取8個未使用磁盤塊,評估磁盤性能時會有2種評估模型(随機io和連續io:磁盤讀寫資料是靠機械手臂完成,如果資料是連續存儲将會提高讀寫速度,亂序将影響讀寫性能)
8.1.3、為了友善管理把塊分為塊組,每個塊組都有獨立的資料區和中繼資料區,塊組的中繼資料資訊和塊組之間運作都由超級塊進行協調,并且在多個塊組中會有超級塊備份,tune2fs可以檢視分區的超級塊資訊舉例:tune2fs -l /dev/sda1,還可以通過dumpe2fs檢視分區中塊組資訊舉例:dumpe2fs /dev/sda1 加上-h也可以檢視超級塊資訊
8.1.4、連結檔案:2個檔案指向同一個inode,此時一個檔案就稱為另一個檔案的硬連結,當一個檔案指向另一個檔案的路徑時此檔案稱為軟連接配接也稱為字元連結,ln -sv建立軟連結,一個inode可以被引用多次其有計數器計算:在引用次為降為0之前是不會被标記為未用的。
8.1.5、硬連結(不能對目錄建立硬連結、也不能跨分區、會增加inode引用計數,軟連接配接可以對目錄建立、不受分區限制、不增加引用計數)。檔案被删除:僅删除路徑,inode指向的磁盤塊被标記為空閑,檔案複制:建立一個新檔案并把原檔案再次寫入磁盤塊,檔案移動:在同一個分區移動:檔案僅是改變了檔案通路路徑、跨分區移到:在新分區建立檔案,把資料複制過去,删除原分區資料。
8.2.1、裝置檔案:特殊檔案隻有ionde 而沒有資料,關聯至一個驅動程式進而跟對應硬體打交道、一般在/dev目錄下,在裝置中繼資料中每個裝置都有裝置号(主裝置号:用于标記驅動程式(裝置類型),次裝置号:标記同一類裝置中的不同裝置,例如多塊硬碟),mknod可以建立裝置檔案,裝置檔案命名由ICANN制定。
8.2.2、mknod (-m設定權限、建立檔案名稱、b塊裝置 主裝置号 次裝置号,舉例:mknod -m 660 /dev/test1 b 120 0),磁盤裝置檔案(/dev/sd[a-z],USB: 串行、SATA: 串行、SCSI: 并行、SAS:串行,用數字辨別分區号如:/dev/sda1,第一分區),磁盤中盤片分為磁道(track)每個磁道由多個扇區(sector)組成每個扇區512個位元組,0磁道0扇區被稱為主引導記錄(MBR:Master Boot Record)用于引導啟動作業系統(os),MBR512位元組分為(446bytes: bootloader、64bytes: 分區表,每16bytes标記一個分區,一共隻能有4主分區、2bytes: MBR有效性标記)。
8.2.3、分區(主分區、擴充分區(擴充分區不能直接使用必須分割為1個或多個邏輯分區)、邏輯分區),分區編号:主+擴充1-4,邏輯分區為5..n,fdisk可以檢視磁盤資訊舉例:fdisk -l | grep -A 10 "^Disk /dev/[sh].*",柱面(cylinder)分區更加柱面劃分,通過cat /proc/partitions也可以檢視磁盤分區資訊
8.2.4、檢視分區:fdisk -l,建立分區:fdisk + 未使用柱面硬碟如:fdisk /dev/sdb(m檢視幫助、p顯示磁盤分區表、n建立分區、d删除分區、t修改分區系統id、w儲存分區、q不儲存分區、l列出所有已知的系統編号),建立分區需要核心重讀分區表後才可使用(Centos5:partprobe,Centos6:partx -a或kpartx -af,Centos6讀取2個指令需要輪流執行最後通過/proc/partitions檢視核心是否識别),分區建立工具:sfdisk和parted
8.2.5、練習寫一個腳本,1、提示輸入一個對其執行分區的新硬體裝置檔案;2、提醒使用者接下來的操作銷毀所有的資料,你繼續嗎?(y或yes: 繼續、n或no:退出、其它字元:提醒輸錯了,再來一次;)3、對磁盤建立分區:(主分區1:大小512M,主分區2:大小2G)4、建立完成後顯示建立的結果;沒有完善後期再修改
8.3.1、建立檔案系統:mkfs : make file system,Linux核心是子產品化的,這些子產品支援動态裝載和解除安裝,檔案系統可能會被直接打包進核心,也可以被編譯成核心子產品,lsmod可以檢視核心已經裝載了那些子產品,如果需要格式化特定檔案系統,通常需要安裝對應的指令工具來實作。例如用rpm或者yum來安裝即可。
8.3.2、mkfs -t FSTYPE = mkfs.FSTYPE舉例:mkfs -t ext3 = mkfs.ext3(mkfs.ext3 /dev/sdb1),還有個指令可以建立檔案系統mke2fs它包含很多選項(-b指定塊大小{1024|2048|4096}、-t指定檔案系統{ext2|ext3|ext4}、-L指定卷标、-j相當于指定檔案系統ext3、-i指定多少位元組建立一個inode、-N 直接指定建立inode數、-m預留白間占整個分區空間的百分比(-m 2))
8.3.3、blkid檢視分區檔案系統資訊,e2label檢視設定卷标舉例:e2label /dev/sdb1 hello,設定卷标為hello、tune2fs修改分區屬性,塊大小不能調整(-j:可以将ext2更新檔案系統ext3、-L修改卷标、-m修改預留的空間百分比、-O ^FEATURE:啟用指定特性,特性前加^,表示關閉此種特性)
8.3.4、因程序意外中止或系統崩潰等情況導入寫入操作非正常中止時,可能會導緻檔案損壞,fsck修複檔案系統一個檔案系統修複時必須先解除安裝(-t指定修複檔案系統(可省略自動檢測以什麼檔案系統修複)、-a自動修複、-r互動式修複,舉例:fsck -t ext3 -a /dev/sdb1),e2fsck用來修複ext檔案系統(-y: 對問題自動回答為yes、-f: 強制進行檢測,舉例:e2fsck -y -f /dev/sdb1)、 mkfs -t vfat可以建立fat32檔案系統、交換分區:swap緩解實體記憶體資源不夠用的情況;mkswap [-L LABEL] DEVICE:舉例:mkswap -L swap1 /dev/sdb2(注意在建立前需要先把分區類型修改為swap類型,用fdisk)
8.3.5、mount把需要挂載的裝置或檔案系統挂到某個目錄中,該目錄成為另一個裝置或檔案系統的通路入口,舉例:(mount /dev/sdb1 /mnt 挂載分區),mount常用的挂載選項(-r: 隻讀挂載、-w: 讀寫挂載、-t :指定檔案系統類型),檢視所有挂載資訊mount、cat/proc/mounts、cat/dev/mtab
8.4.1、mount -o option(async:磁盤異步I/O,sync: 磁盤同步I/O,atime/noatime: 檔案和目錄被通路時是更新最近一次的通路時間戳,auto/noauto:裝置是否支援mount的-a選項自動挂載,diratime/nodiratime: 目錄被通路時是更新最近一次的通路時間戳,dev/nodev: 是否支援在此裝置上使用裝置,exec/noexec: 是否允許執行此裝置上的二進制程式檔案,suid/nosuid: 是否支援在此裝置的檔案上使用suid,remount: 重新挂載舉例:mount -o remount,acl /mnt,通常用于不解除安裝的情況下重新指定挂載選項,ro: 隻讀,rw: 讀寫,user/nouser: 是否允許普通挂載此檔案裝置,acl: 在此裝置是支援使用facl,預設不支援,挂載方式:(mount -o acl /dev/sdb1 /mnt或開啟該分區acl功能以後挂載時就不需要指定該選項:tune2fs -o acl /dev/sdb1))
8.4.2、umount解除安裝umount /mnt,fuser(-v 檢視挂載裝置上通路使用者舉例:fuser -v /dev/sdb1,-km直接提出挂載點上所有使用者舉例:fuser -km /dev/sdb1),df(-h機關換算後顯示裝置空間,-i顯示裝置inode使用情況),du(-s非精确計算目前檔案夾下總體大小、-h機關換算),awk基本使用方法(awk -F: '{print $1}' /det/passwd)
8.4.3、swapon啟用互動分區,舉例:swapno /dev/sdb2、swapoff禁用交換分區:swapoff /dev/sdb2、/etc/fstab字段說明(裝置名、挂載點、檔案系統、挂載選項、備份頻率(0不備份、1每天備份、2隔天備份)、自檢(0不自檢、1優先自檢1隻能用根分區、2....9))
8.4.4、作業1、列出目前系統上的所有磁盤裝置;2、讓使用者選擇一個磁盤裝置,并在選擇後顯示指定裝置上的所有分區資訊;3、詢問使用者是否擦除此磁盤上的所有現存分區後重新添加三個分區(y或yes: 繼續、n或no: 中止腳本、其它字元則提醒使用者重新輸入合法的字元);4、在使用者選擇是後執行相應的分區操作(主分區1:512M,ext4、主分區2: 512M,swap、主分區3:2G,ext4)5、将建立的分區按如上說明分别格式為相應的檔案系統;6、将主分區1挂載至/mnt/boot目錄,主分區3挂載至/mnt/sysroot目錄;擴充:在上述第3個步驟開始之後,先檢視此裝置上是否有分區被挂載,如果有,則先解除安裝之;