磁盤及文件系統管理詳解
磁盤管理:
機械式硬盤:
U盤、光盤、軟盤、硬盤、磁帶
MBR:主引導記錄(512byte),不屬於任何分區
446byte:BootLoader,程序
64byte:每16byte標識一個分區(最多只能創建四個主分區,主+擴展<=4,擴展分區只能有一個)
2byte:Magic Number,標記MBR是否有效
RPM:轉/每分鐘
iNode條目:存儲的是inode號,文件的屬主屬組(Owner/Group)、擴展屬性、權限(Mode)、大小(Size)、時間戳(Timestamps)等各種跟文件數據沒有關系的信息,以及直接/間接/多級間接磁盤塊指針;但是沒有文件名
目錄:路徑映射表
新建文件:找到空iNode以分配iNode節點,找到磁盤塊以填充數據內容
刪除文件:清空iNode節點內容,存儲塊標記為未使用,但數據未刪除
剪切文件:修改iNode節點的存放路徑(同一分區)
復制文件:創建新文件並填充數據內容
跨分區剪切文件:新分區建立文件→從老分區復制文件→老分區刪除文件
inode Bitmap(iNode位圖):標識iNode
block Bitmap(塊位圖):位圖是為了加快索引
Super Block(超級塊):存儲的內容--------有多少塊組、每個塊組中有多少塊、塊大小、空閑/引用磁盤塊、空閑/引用iNode;可有多個備份
GDT(塊組描述符表Group Description Table):保存的內容---------當前分區上每個塊的塊組名,每個塊組起始磁盤號、結束塊的編號;需備份
Boot Block:任何一個分區的第一個塊,預留出來,不能存數據
inode Table(iNode表):存放目錄文件與inode號的對應關系
Boot Block | Block Group 0 | Block Group 1 | ... | Block Group n |
/ \
/ \
Super Block | GDT | Block Bitmap | inode Bitmap | inode Table | Data Blocks |
鏈接文件:
硬鏈接:直接指向同一個iNode的具有不同路徑的兩個文件
1.只能對文件創建,不能應用於目錄
2.不能跨文件系統
3.創建硬鏈接會增加文件被鏈接的次數(ls -l)
軟鏈接(符號鏈接):鏈接文件中保存的內容是被鏈接文件的絕對路徑,權限取決於實際被鏈接文件
1.可應用於目錄
2.可以跨文件系統
3.不會增加被鏈接文件的鏈接次數
4.其大小為指定的路徑所包含的字符個數
# ln [-s -v] SRC DEST
# du FILE (顯示目錄下每個文件及目錄本身的大小)
-s:顯示目錄的大小
-h:單位換算
# df (顯示磁盤分區使用情況)
-i:iNode使用情況
-P:磁盤塊使用情況
-h:換算為合適的單位
設備文件:
塊設備:以塊為單位,隨機訪問的設備-----硬盤
字符設備:以字符為單位的線性設備-----鍵盤
# ll /dev/sda1:(沒有大小)
brw-rw----. 1 root disk 8, 1 Nov 16 08:57 sda1
8主設備號:標識設備類型
1次設備號:標識同一類型中不同設備
創建設備文件:(設備文件需與真實硬件相關聯才能正常使用)
# mknod [OPTION]... NAME TYPE [MAJOR MINOR]
-m MODE:指定權限
TYPE:b(塊設備)、c(字符設備)
硬盤設備的設備文件名:
IDE、ATA:/dev/hd[a-d](第一個IDE口:主/dev/hda+從/dev/hdb,第一個主分區/dev/hda1)
SATA/SCSI/USB:/dev/sd[a-p]
軟驅:/dev/fd[0-1]
打印機:/dev/lp[0-15]
光驅:/dev/cdrom 鼠標:/dev/mouse 磁帶機:/dev/st0或/dev/ht0(IDE設備)
a、b、c...來區別同一種類型下的不同設備
邏輯分區可以有多個(從5開始),擴展分區只能有一個,主分區最多可以有四個
查看當前系統識別了幾塊硬盤:
# fdisk -l [/dev/DEVICENAME] (列出當前系統上的所有[指定]磁盤及其磁盤分區)
管理磁盤分區:
低級格式化:創建磁道
高級格式化:創建文件系統(利用VFS使得Linux可以支持多種文件系統,作翻譯官)
# mkfs.文件類型名稱 硬盤分區名稱(mkfs -t ext2 = mkfs.ext2)
文件類型名稱:cramfs,ext2/3/4,fat,msdos,xfs,btrfs,minix,vfat
ext3(journal file system日誌文件系統):能加快文件系統的修復速度
分區:數據區、元數據區、日誌區
專門管理ext系列文件:
# mke2fs
-j:創建ext3類型文件系統
-b BLOCK_SIZE:指定塊大小,默認為4096,可用取值為1024、2048或4096
-L LABEL:指定分區卷標
-m #:指定預留給超級用戶的塊數百分比
-i #:用於指定為多少字節的空間創建一個inode,默認為8192;這裏給出的數值應為塊大小的2^n倍
-N #:指定iNode個數
-F:強制創建文件系統
-E:用戶指定額外的文件系統屬性
# blkid 硬盤分區名稱 (顯示uuid值全局唯一標識符、卷標label和type等相關屬性屬性,)
# e2label (用於查看或定義卷標)
# e2label 設備文件 卷標 (設定卷標)
# tune2fs (調整文件系統的相關屬性)
-j:不損害原有數據,將ext2升級為ext3
-L LABEL:設定或修改卷標
-m #:調整預留百分比
-r #:指定預留塊數
-o:設定默認掛載選項
-c #:指定掛載次數達到#次之後進行自檢,0或-1代表關閉此功能
-i #:每掛載使用多少天後進行自檢,0或-1代表關閉此功能
-l:顯示超級塊之後的信息
# dumpe2fs (顯示文件系統相關信息)
-h:只顯示超級塊信息
# fsck (檢查並修復Linux文件系統)
-t FSTYPE:指定文件系統類型
-a:自動修復(不詢問)
# e2fsck (專用於修復ext2/3文件系統)
-f:強制檢查
-p:自動修復
# fdisk /dev/sda (交互式命令)
p:顯示當前硬件的分區
n:創建新分區
d:刪除一個分區
w:保存退出
q:不保存退出
t:修改分區類型
l:顯示所支持的所有類型
# cat /proc/partitions (判斷內核是否讀到了新建的分區表信息)
# partprobe [/dev/sda] (通知內核重讀[指定]分區表)
掛載:將新的文件系統關聯至當前根文件系統
卸載:將某文件系統與當前根文件系統的關聯關系予以移除
掛載:mount
# mount (顯示當前系統已經掛載的設備及掛載點)
# mount [options] [-o options] 設備 掛載點
-a:表示掛載/etc/fstab文件中定義的所有文件系統
-n:默認情況下,mount命令每掛載一個設備,都會把掛載的設備信息保存至/etc/mtab文件,使用-n選項意味著掛載設備時,不把信息寫入此文件
-t FSTYPE:指定正在掛載設備上的文件系統的類型,不使用此選項時,mount會調用blkid命令獲取對應文件系統的類型
-r:只讀掛載,掛載光盤時常用此選項
-w:讀寫掛載
-o:指定額外的掛載選項,也即指定文件系統啟用的屬性
remount:重新掛載
loop:掛載本地回環設備(可用於掛載鏡像)
ro:只讀掛載
rw:讀寫掛載
設備:
設備文件:/dev/sda5
卷標:LABEL=" "
UUID:UUID=" "
掛載點:目錄
要求:
此目錄沒有被其他進程使用
目錄得事先存在
目錄中的原有文件將會暫時隱藏
掛載完成後,要通過掛載點訪問對應文件系統上的文件。如光盤鏡像不能直接被訪問,經過掛載之後可以在掛載點中查看其包含內容
卸載:umount
# umount 設備/掛載點
卸載註意事項:掛載的設備沒有進程使用
# fuser (驗證進程正在使用的文件或套接字文件)
-v:查看某文件上正在運行的進程
-k:
-m:
# fuser -km MOUNT_POINT (終止正在訪問此掛載點的所有進程)
swap分區(交換分區):必須是一個獨立的分區
# free (查看分區使用情況)
buffers:緩沖(大→緩沖區→小)
cached:緩存(小→緩存區→大)
創建交換分區:
fdisk命令中,t調整分區類型為82
# mkswap /dev/sda#
-L LABEL
掛載交換分區:
# swapon /dev/sda# (啟用交換分區)
-a:啟用所有的定義在/etc/fstab文件中的交換設備
# swapoff /dev/sda# (關閉交換分區)
回環設備:
loopback:使用軟件來模擬實現硬件
創建一個鏡像文件,120G
創建文件的方式模擬存儲空間:
dd命令:直接復制底層數據流
if=input_file:指定數據來源
of=output_file:指定數據存儲目標
bs=#:設置每個塊的大小
count=#:設置要拷貝塊的個數
conv=ucase:將字母從小寫轉換成大寫
conv=lcase:將字母從大寫轉換為小寫
seek=#:創建數據文件時,跳過的空間大小
文件系統的配置文件/etc/fstab:
OS在初始化時,會自動掛載此文件中定義的每個文件系統
內容:
要掛載的設備 掛載點 文件系統類型 掛載選項 轉儲頻率 文件系統檢測次序
轉儲頻率:跟文件系統備份相關,用於定義多久對此文件系統做一次完全備份,0:不備份,1:每天備份,2:每兩天一次備份....
文件系統檢測次序:只有/為1,其他文件系統可為2,0表示不檢查
文件管理---------壓縮、解壓縮
壓縮格式:gz,bz2,xz,zip,z
壓縮算法:算法不同,壓縮比也會不同
compress:FILENAME.z
uncompress:
gzip:.gz(只能壓縮文件,不能壓縮目錄)
# gzip /PATH/TO/SOMEFILE (壓縮完成後會刪除原文件)
-d:解壓縮
-#:1-9,指定壓縮比,默認是6
# gunzip /PATH/TO/SOMEFILE.gz (解壓完成後會刪除原文件)
# zcat /PATH/TO/SOMEFILE.gz (不解壓的情況,查看文本文件的內容)
bzip2:.bz2,比gzip有更大壓縮比的壓縮工具,使用格式近似(只能壓縮文件,不能壓縮目錄)
# bzip2 /PATH/TO/SOMEFIE (壓縮完成後會刪除原文件)
-d:解壓縮
-#:1-9,指定壓縮比,默認是6
-k:壓縮時保留原文件
# bunzip2 /PATH/TO/SOMEFILE.bz2 (解壓完成後會刪除原文件)
# bzcat /PATH/TO/SOMEFILE.bz2 (不解壓的情況,查看文本文件的內容)
xz:.xz,有更大的壓縮比(只能壓縮文件,不能壓縮目錄)
# xz /PATH/TO/SOMEFILE (壓縮完成後會刪除原文件)
-d:解壓縮
-#:1-9,指定壓縮比,默認是6
-k:壓縮時保留原文件
# unxz /PATH/TO/SOMEFILE.bz2 (解壓完成後會刪除原文件)
# xzcat /PATH/TO/SOMEFILE.bz2 (不解壓的情況,查看文本文件的內容)
zip:既歸檔又壓縮的工具
# zip FILENAME.zip FILE1 FILE2 ... (壓縮後不刪除原文件)
# unzip FILENAME.zip
archive:歸檔,歸檔本身並不意味著壓縮
tar:歸檔工具(只歸檔不壓縮)
# tar
-c:創建歸檔文件
-x:展開歸檔文件
-f FILE.tar:操作歸檔文件名
-t:不展開歸檔,直接查看歸檔了哪些文件
-z:用Gzip壓縮或解壓
-j:用bzip2壓縮或解壓
-J:用xz壓縮或解壓
-v:顯示壓縮或解壓的過程
-p:保留原始的權限與屬性
-P:使用絕對路徑來壓縮
-C:指定解壓到的目錄
--xattrs:歸檔時,保留文件的擴展屬性
cpio:歸檔工具
磁盤及文件系統管理詳解