GNU/Linux >> Linux の 問題 >  >> Linux

Linux のスパース ファイルとは

du および ls コマンドを使用しているときに、一部のファイルのディスク使用量の違いを観察したことがありますか。例:

$ du -sh /u02/ticoprd/redo/*
515M redo1a.rdo
524M redo3b.rdo
518M redo4a.rdo
$ ls -ltrh /u02/ticoprd/redo/*
-rw-r----- 1 oticoprd dba 1.1G Aug 4 01:09 redo1a.rdo
-rw-r----- 1 oticoprd dba 1.1G Aug 4 02:32 redo3b.rdo
-rw-r----- 1 oticoprd dba 1.1G Aug 4 03:51 redo4a.rdo

「ls」コマンドではファイル サイズが 1.1GB と表示されるのに対し、「du」コマンドではファイル サイズが 515MB しか表示されないことがわかります。これらのファイルはスパース ファイルです。 「ls」はファイルの見かけのサイズを表示しており、「du」はディスク上に存在するファイルの実際のサイズを表示しています。

スパース ファイルは、ファイルに割り当てられたブロックがほとんど空である場合に、ファイル システム領域をより効率的に使用しようとするコンピュータ ファイルの一種です。これは、ブロックを構成する実際の「空の」スペースの代わりに、空のブロックを表す簡単な情報 (メタデータ) をディスクに書き込むことによって実現されます。ディスクに割り当てられた領域)。完全なブロック サイズは、ブロックに「実際の」(空でない) データが含まれている場合にのみ、実際のサイズとしてディスクに書き込まれます。

スパース ファイルを読み取る場合、ファイル システムは実行時に、空のブロックを表すメタデータをゼロ バイトで満たされた「実際の」ブロックに透過的に変換します。アプリケーションはこの変換を認識しません。スパース ファイルは、ディスク イメージ、データベース スナップショット、ログ ファイルなどによく使用されます。

スパース ファイルの利点は、実際に必要な場合にのみストレージが割り当てられることです。ディスク容量が節約され、ファイル システムに十分な空き容量がない場合でも大きなファイルを作成できます。

欠点は、スパース ファイルが断片化される可能性があることです。ファイル システムの空き容量レポートは誤解を招く可能性があり、それらを明示的にサポートしていないプログラムでスパース ファイルをコピーすると、ディスク上にないほとんどゼロのスパース セクションを含むファイルの圧縮されていないサイズ全体がコピーされる可能性があります — メリットが失われますファイル内のスパース プロパティの。

この動作は /var/log/lastlog ファイルで確認できます。

# ls -lh /var/log/lastlog
-rw-r--r--. 1 root root 144K Sep 8 22:45 /var/log/lastlog
# du -sh /var/log/lastlog
40K /var/log/lastlog 

スパース ファイルの作成

dd コマンドを使用してスパース ファイルを作成できます:

# dd if=/dev/zero of=sparse_file bs=1 count=0 seek=512M
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000381714 s, 0.0 kB/s
# ls -hl sparse_file
-rw-r--r--. 1 root root 512M Sep 9 00:13 sparse_file
# du -sh sparse_file
0 sparse_file

「ls」コマンドでファイルのディスク使用量を確認するには、「-s」オプションを使用できます。

# ls -lhs sparse_file
0 -rw-r--r--. 1 root root 512M Sep 9 00:13 sparse_file

「du」を使用してファイルの見かけのサイズを表示するには、–apparent-size オプションを使用できます。

# du -h --apparent-size sparse_file
512M sparse_file 

「cp」コマンドでスパース ファイルをコピー

「cp」はスパース ファイルをサポートし、それを検出するのに適しているため、「cp」を実行するだけで十分です。ただし、cp には –sparse=WHEN オプションがあります。

# cp --sparse=always sparse_file sparse_file.2


Linux
  1. Linuxターミナルでファイルをコピーする

  2. Linux で開いているファイルの最大数の制限は何ですか?

  3. Linuxでのファイルタグ付けの良い解決策は何ですか?

  1. Linuxターミナルでファイルを移動する

  2. Linuxのiノード番号とは何ですか?

  3. Linux – Gnu / linuxでファイルパーミッションなどを設定するさまざまな方法は何ですか?

  1. .runファイルとは何ですか?

  2. Linux の /dev/zero および /dev/null ファイルとは

  3. Linuxカーネルヘッダーとは正確には何ですか?