Disk-Usage

du 為同一個文件給出兩個不同的結果

  • February 8, 2017

我是計算化學專業的研究生,可以訪問 Linux 集群。該集群由一個非常大的 (25 TB) 文件伺服器組成,數十個計算節點連接到該文件伺服器。每個計算節點由 8 到 24 個 Intel Xeon 核心組成。每個計算節點還包含一個大約 365 TB 的本地磁碟。

由於研究組中的十幾個使用者經常訪問文件伺服器,因此文件伺服器主要用於長期文件儲存(它每晚備份,而計算節點的本地磁碟從不備份)。因此,系統管理員已指示我們在本地磁碟上執行模擬——它們的 I/O 比文件伺服器快——以免降低其他使用者的文件伺服器速度。

所以,我在本地磁碟上執行模擬,然後,在它們完成後,我將軌跡文件——我正在執行分子動力學 (MD) 模擬——複製到文件伺服器進行儲存。假設我有一個traj.trr在節點本地磁碟上的目錄中呼叫的軌跡文件,/home/myusername/mysimulation1/traj.trr. 對於長期儲存,我總是複製traj.trr到文件伺服器中的一個目錄,~/mysimulation1/traj.trr,其中~代表我在文件伺服器中的目錄,/export/home/myusername. 複製後,我習慣性地用它du -h來驗證它/home/myusername/mysimulation1/traj.trr的文件大小與~/mysimulation1/traj.trr. 這樣,我至少可以合理地確定到文件伺服器的傳輸是成功的。例如:

cd /home/myusername/mysimulation1/
cp -v traj.trr ~/mysimulation1/
du /home/myusername/mysimulation1/traj.trr -h
du ~/mysimulation1/traj.trr -h

如果這兩個呼叫du -h給出了相同的人類可讀文件大小,那麼我可以合理地確定傳輸/複製是成功的。(我的典型traj.trr文件大小從大約 15 GB 到 20 GB 不等,具體取決於我執行的確切模擬。)如果我在兩個文件上執行du(即,沒有-h開關)traj.trr,它們的字節大小通常非常非常相似 - - 通常只有幾個字節。在過去的一年半里,我一直在使用這種整體方法,沒有任何問題。

***但是,***最近我遇到了以下問題:有時du -h報告兩個traj.trr文件的大小相差幾GB。這是一個例子:

cd /home/myusername/mysimulation1/            # this is the local disk
cp -v traj.trr ~/mysimulation1/
du traj.trr -h
cd ~/mysimulation1/                           # this is the fileserver
du traj.trr -h

兩次呼叫的輸出du -h分別如下:

20G     traj.trr
28G     traj.trr

我相信前者(即traj.trr本地磁碟中的/home/myusername/mysimulation1/)是正確的文件大小,因為我的模擬軌跡預計每個約為 15 到 20 GB。但是文件伺服器上的文件怎麼可能實際上更大呢?cp如果傳輸以某種方式失敗,我可以看到它如何變得更小。但我看不出它實際上如何更大

當我執行與上述相同的命令時,我得到類似的輸出,但沒有-h給定開關du

20717480        traj.trr
28666688        traj.trr

你能想到造成這種差異的任何原因嗎?

如果出於某種不太可能的機會du出現故障,我可以接受。但我真的需要確保traj.trr文件伺服器上的副本是完整的,並且與本地磁碟上的源版本相同。我需要刪除本地文件,以便有足夠的本地磁碟空間來執行新的模擬,但我不能讓traj.trr文件伺服器上的版本損壞。

.trr 文件格式(來自Gromacs 分子動力學包)是二進制格式,而不是文本。因此,我不確定這些文件是否可以通過諸如diff.

你真的應該使用類似md5sumor的東西sha1sum來檢查完整性。

如果您真的想使用尺寸,請使用ls -ldu -b

du實用程序通常只顯示文件的磁碟使用情況,即它使用了多少文件系統。該值完全取決於備份文件系統和稀疏文件等其他因素。

例子:

$ truncate -s 512M foo
$ cat foo >bar
$ ls -l foo bar
-rw-r--r-- 1 michas users 536870912 23. Dez 00:06 bar
-rw-r--r-- 1 michas users 536870912 23. Dez 00:03 foo
$ du foo bar
0       foo
524288  bar
$ du -b foo bar
536870912       foo
536870912       bar

我們有兩個文件都包含 512MB 的零。第一個儲存稀疏,不使用任何磁碟空間,而第二個將每個字節顯式儲存在磁碟上。– 相同的文件,但磁碟使用情況完全不同。

-b選項可能對您有好處:

  -b, --bytes
         equivalent to '--apparent-size --block-size=1'

  --apparent-size
         print apparent sizes, rather than disk usage; although the apparent
         size is  usually  smaller,  it  may  be  larger  due  to  holes  in
         ('sparse')  files, internal fragmentation, indirect blocks, and the
         like

引用自:https://unix.stackexchange.com/questions/106275