du的原理 linux_Linux 文件系统管理
1、文件系統介紹
1)、Linux 文件系統特性
- super block(超級塊)
- 記錄整個文件系統的信息。包括 block 與 inode 的總量,已經使用的 block 和 inode 的數量,未使用的 block 和 inode 的數量,block 與 inode 的大小,文件系統的掛載時間,最近一次的寫入時間等。
- data block(數據塊,也稱作 block)
- 用來實際保存數據的(柜子的隔板),block 的大小(1kb、2kb、4kb)和數量在格式化后就已經決定,不能改變,除非重新格式化(制作柜子的時候,隔斷大小就已經決定,不能更改,除非重新制作柜子)。每個 block 只能保存一個文件數據,要是文件數據小于一個 block 塊,那么這個 block 的剩余空間不能被其它文件使用,要是文件數據大于一個 block 塊,則占用多個 block 塊。Windows 中磁盤碎片整理工具的原理就是把一個文件占用的多個 block 塊盡量整理到一起,這樣可以加快讀寫速度。
- inode(i 節點,柜子門上的標簽)
- 用來記錄文件的權限(r、w、x),文件的所有者和所屬組,文件的大小,文件的狀態改變時間(ctime),文件的最近一次讀取時間(atime),文件的最近一次修改時間(mtime),文件的數據真正保存的 block 編號。每個文件需要占用一個 inode
2、文件系統命令
① df 命令
用來查看硬盤分區空間使用情況df -h[root@hepingfly 桌面]# df -hT 加個 -T 參數,結果會多出 Type 這一列,顯示分區的文件系統類型 Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 9.8G 3.0G 6.3G 33% / tmpfs tmpfs 491M 80K 491M 1% /dev/shm /dev/sda1 ext4 976M 34M 892M 4% /boot /dev/sda3 ext4 4.8G 11M 4.6G 1% /home /dev/sr0 iso9660 3.7G 3.7G 0 100% /media/CentOS_6.8_Final② du 命令
我們經常用這個命令來查看目錄大小,因為用 ll 去查看目錄大小不準確,使用 ll 去查看目錄帶下一般都是 4k 或者 4k 的倍數,因為使用 ll 它統計出來的實際上是,目錄中存的所有文件名的大小,一個 block 占 4kb 如果一個 block 存不下就用兩個 block 去存,占 8kb。du [選項] [目錄或文件名]選項:
? -a:顯示每個子文件的磁盤占用量。默認只統計子目錄的磁盤占用量。
? -h :人性化顯示
? -s :統計總占用量,而不列出子目錄和子文件占用量[root@hepingfly init]# du -hs /home/ 104K /home/
說明:
du 與 df 的區別:du 是用于統計文件大小的,統計文件大小是準確的,df 是用于統計空間大小的,統計的剩余空間是準確的。有時候會存在這兩個統計不一致的情況,原因是 df 統計的是空間,臨時文件、垃圾文件等都會占用空間,df 就光統計文件大小,所以這兩個會存在差異情況。
③ dumpe2fs 命令
顯示磁盤狀態
dumpe2fs /dev/sda3④ 判斷文件類型
file 文件名 判斷文件類型type 命令名 判斷命令類型[root@hepingfly hgfs]# type mkdir 這個命令是外部命令 mkdir is /bin/mkdir [root@hepingfly hgfs]# type cd 這個命令是內置命令 cd is a shell builtin [root@hepingfly hgfs]# cd /home/hepingfly/ [root@hepingfly hepingfly]# ll 總用量 8 -rw-r--r--. 1 root root 4 4月 18 00:07 abc -rw-r--r--. 1 root root 0 4月 18 00:06 abc~ drwxr-xr-x. 2 root root 4096 4月 17 23:59 test [root@hepingfly hepingfly]# file test 表示這是一個目錄 test: directory [root@hepingfly hepingfly]# file abc 表示這是一個文件 abc: ASCII text# 上面命令,在你寫 shell 腳本的時候可能會用到
3、手工分區
fdisk 命令
fdisk -l查看系統所有硬盤及分區
使用如下命令進行分區:
①『 fdisk /dev/sdb 』 進行磁盤分區(在開始分區的時候還沒有分區號)
sdb 表示第二塊硬盤,我之前只有一塊硬盤,現在我新添加一塊硬盤,要對這塊硬盤進行分區,所以寫 /dev/sdb注意這個 sdb 后面不能跟數字,因為數字是表示分區號,我現在就是沒有分區才要去分區的,如果寫分區號,代表都有分區了,那我還分什么區。
假如你原來有兩塊硬盤,現在新添加一塊硬盤,要對這個硬盤進行分區,那么這里就要寫 /dev/sdc 了
你輸入上面的命令就會開始分區了,分區的時候會與系統進行交互。
fdisk 交互指定說明:
命令說明a設置可引導標記b編輯 bsd 磁盤標簽c設置 DOS 操作系統兼容標記d刪除一個分區l顯示已知的文件系統類型。82 為 Linux swap 分區,83 為 Linux 分區m顯示幫助菜單n新建分區o建立空白 DOS 分區表p打印分區列表q不保存退出s新建空白 SUN 磁盤標簽t改變一個分區的系統 IDu改變顯示記錄單位v驗證分區表w保存退出x附加功能
②具體分區步驟見:
https://console.cloud.tencent.com/cos5/bucket/setting?type=filelist&bucketName=shp-notes-1257820375&path=%252Fshp-linux%252F?ion=ap-chengdu這個里面 1~ 18 個截圖,建議把截圖弄出來放到 word 中,看更方便
③分區完成之后要進行格式化:
格式化,建立文件系統:
mkfs -t ext4 /dev/sdb1mkfs -t ext4 /dev/sdb5說明:
ext4 表示 linux 的文件系統,上面我在分區的時候分了一個主分區,一個擴展分區,一個邏輯分區,擴展分區不能存儲數據,也不能格式化,邏輯分區,分區號是從 5 開始的,所以把 sdb1 和 sdb5 格式化后,建立文件系統才能使用
④ 建立掛載點
mkdir /disk1mkdir /disk5所有的分區都是要掛載之后才能使用的
⑤ 掛載
mount /dev/sdb1 /disk1mount /dev/sdb5 /disk5⑥ 查看
mount 查看所有已掛載的分區和光盤fdisk -l 查看系統分區
df -h 查看磁盤空間使用情況
4、自動掛載
我們只允許對固定設備做自動掛載,不允許對光盤或者 U 盤等移動硬盤做自動掛載。因為你如果對移動設備做了自動掛載,但是系統啟動的時候,你如果忘了插入光盤或者 U 盤,那么系統就會直接崩潰,因為它找不到這個設備。
如何自動掛載?
通過修改分區自動掛載文件實現。
vim /etc/fstab 注意:這個文件直接參與系統啟動,如果修改錯誤,系統啟動報錯vim /etc/fstab UUID=adec8353-015d-4846-9f00-d4f16630ec3a / ext4 defaults 1 1 UUID=1b8318b7-046d-4694-b723-afa92e96888e /boot ext4 defaults 1 2 UUID=f20a6373-1d80-4fcc-9d8d-a7c2be91d11f /home ext4 defaults 1 2 UUID=cc8c66fd-21d7-42ee-8a6f-3d62c71e09b0 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0解釋下上面的內容:
- 第一列:設備文件名
- 第二列:掛載點
- 第三列:文件系統
- 第四列:掛載選項
- 第五列:是否可以被備份 0 :不備份 1:每天備份 2:不定期備份(建議寫 1)
- 第六列:是否檢測磁盤 fsck 0 : 不檢測 1:啟動時檢測 2:啟動后檢測(建議寫 2)
自動掛載示例:
vim /etc/fstab /dev/sdb1 /disk1 ext4 defaults 1 2 /dev/sdb5 /disk5 ext4 defaults 1 2# 這樣我就是實現了 sdb1 和 sdb5 這兩個分區開機自動掛載說明:
其實在上面我們也看到了,第一列有 UUID ,其實也可以使用 UUID 去進行掛載。其實使用 UUID 去掛載還會有好處,好處就是當硬盤增加了新的分區,或者分區的順序改變,再或者內核升級后,仍然能夠保證分區能夠正確的加載,而不至于造成啟動障礙。使用 UUID 掛載,只需要把第一列的設備文件名換成查詢到的分區 UUID 即可,其他列和使用設備文件名掛載一樣。
如何查詢分區對應的 UUID:
ls -l /dev/disk/by-uuid/[root@hepingfly disk1]# ls -l /dev/disk/by-uuid/ 總用量 0 lrwxrwxrwx. 1 root root 10 4月 23 21:30 1b8318b7-046d-4694-b723-afa92e96888e -> ../../sda1 lrwxrwxrwx. 1 root root 10 4月 23 21:30 3731f19b-ecd4-4ac5-ad41-303c894ed742 -> ../../sdb5 lrwxrwxrwx. 1 root root 10 4月 23 21:30 6aedc6ac-d2e1-465e-a824-07b4b9d10ae5 -> ../../sdb1 lrwxrwxrwx. 1 root root 10 4月 23 21:30 adec8353-015d-4846-9f00-d4f16630ec3a -> ../../sda2 lrwxrwxrwx. 1 root root 10 4月 23 21:30 cc8c66fd-21d7-42ee-8a6f-3d62c71e09b0 -> ../../sda5 lrwxrwxrwx. 1 root root 10 4月 23 21:30 f20a6373-1d80-4fcc-9d8d-a7c2be91d11f -> ../../sda3# 使用上面的命令可以看到每個分區對應的 UUID測試:
mount -a 重新掛載所有內容再輸入 mount 命令,查看是否掛載成功?;蛘咧貑⒁残小?h3>5、parted 命令分區
我們 Linux 系統中有兩種常見的分區表,MBR 分區表和 GPT 分區表。
- MBR 分區表 :支持最大分區是 2TB ,最多支持 4 個主分區,或 3 個主分區 1 個擴展分區
- GPT 分區表:支持最大 18EB 的分區(1EB = 1024PB = 1024 * 1024TB),最多支持 128 個分區,其中 1 個系統保留分區,127 個用戶自定義分區
一般我們使用 fdisk 命令進行分區的時候,都是對 MBR 分區表進行分區,但是這種分區表,支持的硬盤最大 2TB,也就是說你硬盤容量如果大于 2TB ,使用 MBR 分區表后面的都不會識別了。所以如果你硬盤容量超過 2TB,就需要使用 parted 命令進行分區。另外,你使用 parted 命令分完區之后,就不會存在什么主分區、擴展分區、邏輯分區了,因為我們說之所以存在主分區、擴展分區、邏輯分區,就是因為 MBR 分區表,最多支持 4 個主分區,所以我們想突破 4 個主分區的限制,就弄出了擴展分區和邏輯分區,那么現在 GPT 分區表,已經支持 128 個分區了,所以就不需要這些主分區、擴展分區、邏輯分區了,都是主分區。
總結
以上是生活随笔為你收集整理的du的原理 linux_Linux 文件系统管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北京环球影城适合孩子玩的项目
- 下一篇: linux内核删不掉,linux 删除内