note: du / ls 的結果,檔案佔用 size 不同

2021120711:28
ls 跟 du 出來的檔案 size 不同
例如


# du -lh /home/cachedata
226M    .

# ls -lh /home/cachedata
total 226M
-rw-r--r-- 1 nobody nobody 16G May 13 15:29 cache.db


當在 建立一個空的檔案時
並未馬上建立(佔用)16G 大小的硬碟空間
而是跟作業系統要求此檔案大小 (16G) 的空間申請下來(連續空間)
然後在實際讀寫時


du  (disk usage)  佔用磁碟空間
  檔案大小 檔案佔用磁碟空間 不大一樣
  以 linux 而言,一個區塊 block 為 4Kb
  建一個 1byte 的檔案,實際會佔用一個區塊 block 4Kb 硬碟空間
  但 ls 出來是 1byte 沒錯

  建一個 5Kb 的檔案,實際會佔用兩個區塊 block 8Kb 硬碟空間
 

例如

# ls -l aa.txt
-rw-r--r-- 1 www users 186 Nov 18 23:30 aa.txt

# ls -lh j.php
-rw-r--r-- 1 www users 186 Nov 18 23:30 aa.txt

# du -lh aa.txt
4.0K    aa.txt  (佔用一個區塊 block 的空間)


另外:
還有個 Sparse File 稀疏檔案
https://zh.wikipedia.org/wiki/稀疏文件
Sparse file (wiki)
例如建立一個 5MB 的空檔案 (沒有任何內容)
ls 時結果是  5MB
du 時結果是 0
$ dd of=sparse-file bs=1k seek=5120 count=0
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000107405 s, 0.0 kB/s

$ ls -l sparse-file
-rw-rw-r--. 1 web wweb 5242880 Dec  6 18:32 sparse-file

$ du sparse-file
0       sparse-file




ls and du shows VERY different size!

What is the difference between du -h and ls -lh?

稀疏文件(sparse-files)生成汇总


4 KB 扇区磁盘上的 Linux:实用性建议

高级的格式化磁盘使用的是 4,096 字节的扇区,而不是更常见的 512 字节的扇区。为了让操作系统正常运行,人们使用固件将 4,096 字节的物理扇区分成 512 字节的逻辑分区,以此掩盖了这一变化,但是较大物理扇区的使用给磁盘布局和系统性能带来了一些隐患。本文将查看这些隐患,包括基准测试,它们描述了对一些常见 Linux 文件系统的可能的实际影响。随着高级的格式化磁盘变得越来越普遍,对于那些想要避免与次优配置相关的严重性能损失的人来说,了解如何处理这些磁盘也成为了一项重要的技能。