この Linux ストレージ機能は、理解すると不正行為のように感じられます

in tech

ストレージは、ほとんどの人が何かが壊れたときだけ考える Linux の部分の 1 つです。インストール中にファイル システムを選択し、ファイルを信頼してから、その存在を忘れてしまいます。これは、OS、ホーム フォルダー、ログ、ダウンロード、作業内容、変更中に犯す小さな間違いなど、あらゆるものの下にあります。何年もの間、それは主に 1 つのことを意味していました。ファイルが変更されると、古いデータが新しいデータで上書きされ、次に進むということです。

コピーオンライト (CoW) は、ほとんど不正行為のように感じられる方法で取引を変更します。 CoW ファイル システムは、古いブロックを急いで上書きするのではなく、変更されたデータを別の場所に書き込み、マップを更新します。この単純な変更により、スナップショット、安価なクローン、ロールバック、およびよりスマートなバックアップが可能になります。

CoW は修正されたと思っていたルールを変更します

新しい書き込みでは古いブロックはそのまま残ります

プレーンなファイル システムでは、ファイルを変更することは、多くの場合、所定の場所にある古いブロックを変更することを意味します。 CoW ファイル システムでは、古いブロックはそのまま残され、変更されたデータは新しいブロックに書き込まれます。その後初めて、ファイル システムはポインターを更新します。

これは、ファイル システムが最初に完全な 2 番目のコピーを作成しなくても、データの古いビューを保持できることを意味します。この 1 つのアイデアが、CoW が初めてユーザーを救ったときに不公平だと感じさせるほとんどの機能の背後にあります。スナップショットは古い状態を保持できます。クローンファイルは最初のファイルとブロックを共有できます。バックアップ ストリームは、以前のスナップショットの後に変更されたもののみを送信できます。

CoW の仕組み

変更されたデータには依然としてスペースが必要です。巨大なファイルを毎日書き換えながら何ヶ月もスナップショットを保存していても、ディスクはいっぱいになってしまい、当然のことのように見なされます。本当の意味は、ストレージが無料になることではなく、変更されていないデータを再度コピーする必要がなくなり、別のビューを保持できるようになることです。

CoW の動作を実感する最も簡単な方法は、VM ディスク イメージなどの大きなファイルについて考えることです。通常の方法でコピーすると、別の完全なコピーが得られます。 Btrfs 上の reflink を使用してコピーすると、2 番目のファイルは最初のファイルと同じデータ ブロックを共有することから始まります。どちらのファイルも本物のように見え、開いて変更することができます。しかし、2 番目のスペースには、一度にさらに大量のスペースが必要ではありません。

CoW の動作と通常のコピー操作の例

1 つのコピーが変更されると、変更された部分のみが新しいブロックを必要とします。変更されていない部分は共有されたままになります。これが、スナップショットが非常に役立つ理由です。サブボリュームのスナップショットは、同じブロックの別のビューとして開始されるため、ほぼ同時に作成できます。ライブ システムが変更されると、スナップショットには古いブロックが保持され続けます。これにより、システムのアップグレード、危険な構成編集、パッケージのクリーンアップ、「これには 1 分しかかからないでしょう」と始まる深夜の実験の前に、スナップショットを完璧に作成できます。

Btrfs は Linux に優しい方法です

カーネルに近く、アクセスしやすい

Linux では、Btrfs が CoW ストレージの使用を開始する最も簡単な方法です。これはカーネル ツリー内に存在し、そのユーザー空間ツールは広くパッケージ化されており、多くのディストリビューションはカーネル ツリーに直接インストールする方法を知っています。 Debian はインストール中に Btrfs を使用でき、スペア ディスク上では、いくつかのコマンドを実行するだけでテストを開始できます。

btrfs ドキュメントのホームページのスクリーンショット

Btrfs は、サブボリューム、スナップショット、チェックサム、reflink、および送受信を提供します。このため、ラップトップ、デスクトップ、小型ホーム サーバー、バックアップ ドライブ、テスト ボックスで便利です。ルート ファイル システムを 1 つのサブボリュームに、ホーム ディレクトリを別のサブボリュームに、スナップショットを管理しやすい場所に保存できます。

OpenZFS はこの分野のもう 1 つの有名企業ですが、場合によっては OpenZFS の方が良い選択となる場合もあります。ミラー、RAIDZ、データセット、クォータ、スクラブ、スナップショット、レプリケーションを備えたストレージ サーバーを構築している場合、OpenZFS の方が成熟していると感じることがよくあります。そのツールは明確で、そのプール モデルは強力で、ストレージを大量に使用するセットアップにおけるその歴史を振り払うのは困難です。

ターミナル ウィンドウの横で心配そうにしている Linux Tux マスコットのイラスト。警告アイコンとドクロのシンボルが付いています。

バックアップだけでは不十分: Linux 上の ZFS の最新ガイド

それは素晴らしいことですが、残念ながら欠点もあります。

最大の魅力は Linux のサポートです。Linux 上の OpenZFS は大幅に改善されており、最近のリリースは以前よりも新しいカーネルによく対応しています。それでも、Btrfs ほど Linux に近いわけではありません。 Btrfs はカーネルの一部ですが、OpenZFS はカーネルの一部ではなく、主にライセンスの関係で、Debian ではカーネルを介して提供されます。 contrib システムのカーネル モジュールを構築する DKMS パッケージ。これは多くのユーザーにとってうまく機能しますが、依然として別の可動部分です。

Debian で安全な btrfs セットアップをセットアップする

実際のデータに触れる前にループバック ディスクを使用する

CoW について学ぶ最善の方法は、マシンを再インストールしないことです。スペアディスク、USB SSD、またはループバックファイルを使用してください。ループバック ファイルは実際のディスクよりも遅いですが、有用なリスクを冒さずにスナップショット、reflink、およびサブボリュームを学習するには十分です。

まずツールをインストールします。

sudo apt update -y
sudo apt install btrfs-progs -y

テスト イメージを作成します。

truncate -s 5G ~/btrfs-demo.img
sudo losetup --find --show ~/btrfs-demo.img

最後のコマンドは、次のようなループ デバイスを出力します。 /dev/loop11。デバイスを使用すると、システムは次のように表示します。

sudo mkfs.btrfs -L cowdemo /dev/loop11
sudo mkdir -p /mnt/cowdemo
フルデバイストリムの実行

サブボリュームを作成し、ファイルのクローンを作成する

ここから CoW が偽物に見え始める

テスト データ用のサブボリュームを作成します。

sudo btrfs subvolume create /mnt/cowdemo/@data
sudo mkdir -p /mnt/cowdemo/@data/projects

サブボリュームはフォルダーのように見えますが、Btrfs はそれを独自のファイル ツリーとして扱います。そのため、単独でスナップショットを作成できます。

次に、大きなテスト ファイルを作成します。

cd /mnt/cowdemo/@data/projects
sudo dd if=/dev/zero of=bigfile.img bs=1M count=1024 status=progress
デモ用に大きなファイルを作成する

reflink コピーを作成します。

sudo cp --reflink=always bigfile.img bigfile-copy.img
ls -lh
sudo btrfs filesystem du -s .
再リンクの作成とファイルサイズの表示

ls は 2 つの大きなファイルを示していますが、Btrfs はそれらがブロックを共有していることを認識しています。 1 GB のファイルをコピーしたように見えますが、ファイル システムはまだすぐにさらに 1 GB を消費していません。

次に、コピーの一部を変更します。

sudo dd if=/dev/urandom of=bigfile-copy.img bs=1M count=50 conv=notrunc,fsync status=progress
sync
sudo btrfs filesystem du -s .
file-mh変更後のファイルサイズ

約 50 MiB のみが新しい一意のデータになり、1 GiB の大部分は依然として共有されています。シェルでは 1 GiB のファイルが 2 つあると表示されますが、Btrfs では実際にディスク上で共有されているのは 1 GiB だけであると表示されており、この部分が本当に不正行為のように感じられます。

HGST 12TB ヘリ​​ウム再認定ハードドライブ。

3 つのコピー、2 つのフォーマット、1 つの大きな問題: 最新のバックアップが失敗する理由

「3-2-1」バックアップ ルールはついに時代遅れになりました – 代わりに行うべきことは次のとおりです


CoW はストレージに対する考え方を変えます

CoW をもう 1 つのファイル システム機能として説明すると、CoW を過小評価しやすくなります。本当の変化は CoW によって可能になる習慣にあるからです。危険な変更をテストする前にディレクトリ全体をコピーする代わりに、スナップショットを取得し、古い状態、安価なクローン、ロールバック パスを使用して作業を続けることができます。一度クリックすると、CoW は、何年も前に学びたかった Linux 機能の 1 つのように感じられます。

関連情報は以下のリンクからご確認いただけます

公式情報はこちら

関連記事

前の投稿
スーパーガールを見た後にストリーミングされる HBO Max スーパーヒーロー映画 5 本
次の投稿
アン・ライスの不滅の宇宙: テレビで最も過小評価されている共有宇宙について解説