分析開發板信息中為啥df -h顯示sda11分區掛載只有2GB Size且使用100%,但fdisk -l sda11有37GB size?
問題點
當使用開發板中的存儲設備分區,進而格式化掛載到某個目錄上后,使用df&lsblk后發現分區掛載情況和實際的存儲器分區信息有差異后,會感到很疑惑,下面介紹遇到的情況:
情況1 使用xml添加分區后發現對應分區格式化&掛載對應設置的系統目錄上但分區size Available size&Used之和不相等情況
如在yocto linux工程中對XML表格添加2GB的分區后,重新編譯燒錄后:

一般看到/mnt掛載路徑下,Size != Available + Used,大概相差100多MB,會疑惑為啥有這個100多MB的缺額呢?實際上這個與格式化命令中的mkfs.ext2/3/4中的-m選項有關!

但實際上新添加分區的自身Size大小是沒變化的,可以通過fdisk -l查看:

情況1的衍生問題
當對2GB的分區進行格式化會消耗掉存儲器自身的100MB Size的存儲空間嗎?
有什么計算依據計算格式化系統消耗存儲空間容量大小呢?
情況2 UFS設備分出37GB Size的分區格式化mount到/data, 但使用df -lh 顯示只有2GB size 的容量使用且達到100%!


同問題1一樣還是命令輸出信息導致的問題,一開始認為是Yocto linux系統做包的XML文件對sda11分區設置存在問題,細想sda11對應于UFS設備的userdata,也就是說類比于eMMC的userdata,其設置值無關具體size!
(為啥eMMC/UFS設備分區時最后一個分區設置為userdata且其size數值設置隨意地很?這個真的需要詳細分析分析)

分析到這里,可以止損了!不要鉆牛角尖了,浪費時間!別人分區這么多次,做包都沒啥問題,那么肯定問題在此的可能性不大了!換個思路吧!
那么怎么分析呢?同情況1一樣,文件系統層面和邏輯塊層面差異找答案!
最終在網上找到相關點:
lsblk --- 查看block Device,邏輯磁盤大?。?br>
df --- 查看file system,文件系統層的磁盤大小,主要是掛載的文件系統的存儲塊設備使用情況;
造成這種情況應該是block device容量變大但沒有反映到file system層面,對此若存儲設備格式化文件系統是ext2/3/4,使用resize2fs命令更新;
這里sda11是ext4文件系統:resize2fs /dev/sda11

這里man resize2fs, 是的,Linux世界有問題找男人!

引申一個問題:
上面使用resize2fs /dev/sda11 一次只將/dev/sda11的size增大了1.1GB左右,多試幾次此命令也是沒有變化!man resize2fs這里提到常用resize2fs是在unmount存儲塊設備下使用的,在線mount時還需要額外配置命令!
在Linux 2.6或更高版本的內核中,該命令還支持在線擴容已經掛載的文件系統,該命令常用來針對LVM擴容后的分區使用!這個LVM需要實際操作下!

浙公網安備 33010602011771號