シェルコマンドは過度のメモリ使用を引き起こしますが、シェルスクリプトはそうではありません。

シェルコマンドは過度のメモリ使用を引き起こしますが、シェルスクリプトはそうではありません。

[Linux Mint 20.1、16GB RAM、16GBスワップ]

最近、システム(ルートおよびバックアップパーティション)をBTRFSに変換しました。ルートの一部のスナップショットをバックアップドライブに保存しようとしましたが、次のコマンドのメモリ使用量が原因でシステムがクラッシュしました。

btrfs send /.snapshots/98/snapshot | btrfs receive /media/backups/@root/.snapshots/98

このコマンドはほぼ20GBのRAMを占有し、その過程でシステムが数回完全に停止しました。私のルートパーティションはスナップショットを除いて約11 GBを使います。

次のテストは、次のようにスクリプトで同じコマンドを使用することです(元の理由はsystemd-runメモリ制限をテストして設定することでした)。

#!/usr/bin/fish

btrfs send /.snapshots/98/snapshot | btrfs receive /media/backups/@root/.snapshots/98

このスクリプトを実行すると、合計8MBが使用され、4倍速くなります。同じテスト環境で実行されていることを確認するために、元のバックアップスナップショットが削除されコミットされていることを確認しました(btrfs subvol delete -Cv)。また、bashで同じテストを実行して同じ結果を得ました。

更新:すべてのテストを同じにするためにエイリアス(to)の代わりに再実行しfishました。結果は同じです。bash/usr/bin/btrfssudo btrfs

アップデート#2:以前のアップデートにエラーがありました。

ベストアンサー1

おすすめ記事