ZFSには重複排除機能があり、同じファイルを複数の場所に保持できますが、コピー1つ程度のスペースしか使用できないと聞きました。私は音楽/画像などで終わる傾向があることがわかりました。時間が経つにつれて、私のハードドライブのさまざまな場所でこれが起こり、ZFSパーティションを作成してメディアをそのパーティションに移動するのが最善だと思いました。これを行う方法や可能性を見つけるのに苦労しています。ほとんどのチュートリアルでは「3つのディスクを取り込み、ZFSでRAID」と説明していますが、ディスクが1つあるノートブックを使用しており、既存のOSを削除する予定はありません。 ZFSパーティショニング(https://serverfault.com/questions/628632/should-i-create-zfs-zpools-with-whole-disks-or-partitions)しかし、単一のZFSパーティションを既存のディスクに追加する方法を説明するものが見つかりませんでした。そんなことが可能でしょうか? (私のディスクパーティションテーブルタイプはmsdosですが、私はUbuntuを実行しています。)
答え1
スペースを節約しながらメディア構成を最大化することが目標である場合は、メディアライブラリのディレクトリツリーを配置してから、コマンドcp
(データコピー)とコマンド(ハードまたはハードデータ生成)を慎重に使用してln
これを達成できます。ソフト[-s
使用する場合]リンク)参照データにアクセスまたはコピーするには、便宜上、同じファイルを別のディレクトリで別の名前で使用できる場合も同様です。それでも同じファイルで、ハードリンクまたはソフトリンクが異なるだけです。
手動レベルで非常に簡単な観点からln
見るとcp
。
ln
ZFSを追加すると、使用するまで覚えておく必要がないという即時の利点がありますcp
。メディアを意図的に分割、変更、編集、並べ替えるなど、さまざまなユースケースがあります。個々のメディア「クリップ」を保存すると、ZFSで行われます。データ重複排除の利点をお楽しみください。
ZFSのコストは、重複排除がかなりRAM集約的であるということです。カーネルは、各ブロックのチェックサムまたはハッシュをディスクに保存し、ブロックがプールに書き戻されると、リアルタイムでアレイにアクセスする必要があります。したがって、ディスクがいっぱいになると(より多くのZFSブロックが書き込まれる)、カーネルが各ブロックデータのハッシュをキャッシュするため、より多くのRAMがいっぱいになります。ノートブック内のRAMの容量とディスクの数によっては問題になる可能性がありますが、重複排除の主なコストは、ディスク全体のハッシュアレイを格納するのに十分なRAMを確保することにあることを覚えておくことをお勧めします。より少ないRAMで実行できますが、ハッシュ配列全体を一度に保持するのに十分なRAMがないシステムでは、カーネルがRAMチャンクでハッシュ配列をRAMの内外に交換しようとすると、特に書き込みアクセスが困難になります。
ただし、小さなZFSプールを試す1つの方法は次のとおりです。
仮想ブロックデバイスの作成
ここではFreeBSDコマンドを使用していますが、手順はUbuntuでも似ています。私が例示したブロックデバイスのサイズは10Gですが、空き容量がある場合は、より大きなサイズを使用できます。
ztest.dat
10Gファイルを生成します。# truncate -s 10G ztest.dat
そして、このファイルでサポートされている仮想ブロックデバイスを作成します。
# mdconfig -f ztest.dat
md0
もしそうなら、私たちの仮想デバイスはです/dev/md0
。
簡単なZPOOLの作成と重複排除の有効化
# zpool create ztest md0
# zfs set dedup=on ztest
# zpool status ztest
pool: ztest
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
ztest ONLINE 0 0 0
md0 ONLINE 0 0 0
errors: No known data errors
これによりztest
ファイルシステムが にマウントされます/ztest
。また/ztest
、ディレクトリ、ファイルシステム、およびZFSプールに関するいくつかの基本統計をすばやく表示する簡単なシェル機能を作成しましょう。
zlist() {
zfs list ztest
echo
zfs get all ztest | egrep 'used|refer'
echo
zpool get dedupratio ztest
}
その後、これらのツールを使用して、以下に必要なメディア階層を作成し、いくつかの/ztest
サンプルメディアファイルを/ztest
ファイルシステムにコピーし始めることができます。
# ls -l /ztest; echo; zlist
total 0
NAME USED AVAIL REFER MOUNTPOINT
ztest 114K 9.20G 24K /ztest
ztest used 114K -
ztest referenced 24K -
ztest usedbysnapshots 0B -
ztest usedbydataset 24K -
ztest usedbychildren 90K -
ztest usedbyrefreservation 0B -
ztest logicalused 42K -
ztest logicalreferenced 12K -
NAME PROPERTY VALUE SOURCE
ztest dedupratio 1.00x -
Adedupratio
が1.00の場合、重複排除は実行されません。ファイルシステム内のデータの論理サイズは、プールに格納されている物理データサイズの1.00倍です。
しかし、まだ何もコピーしていません!今やろう:
# cp -vp ~jim/my-fave-dvd.iso /ztest/copy1.iso
/home/jim/my-fave-dvd.iso -> /ztest/copy1.iso
結果を確認してください。
# ls -l /ztest; echo; zlist
total 3271173
-rw-r--r-- 1 jim jim 3347775488 Jul 1 2014 copy1.iso
NAME USED AVAIL REFER MOUNTPOINT
ztest 3.13G 6.08G 3.12G /ztest
ztest used 3.13G -
ztest referenced 3.12G -
ztest usedbysnapshots 0B -
ztest usedbydataset 3.12G -
ztest usedbychildren 7.18M -
ztest usedbyrefreservation 0B -
ztest logicalused 3.12G -
ztest logicalreferenced 3.12G -
NAME PROPERTY VALUE SOURCE
ztest dedupratio 1.00x -
最初のメディアファイルのコピーは1つだけ保存されるため、重複排除率はまだ1.00です。コピーを作成しましょう。
# cp -vp /ztest/copy1.iso /ztest/copy2.iso
/ztest/copy1.iso -> /ztest/copy2.iso
# ls -l /ztest; echo; zlist
total 6542345
-rw-r--r-- 1 jim jim 3347775488 Jul 1 2014 copy1.iso
-rw-r--r-- 1 jim jim 3347775488 Jul 1 2014 copy2.iso
NAME USED AVAIL REFER MOUNTPOINT
ztest 6.25G 6.07G 6.24G /ztest
ztest used 6.25G -
ztest referenced 6.24G -
ztest usedbysnapshots 0B -
ztest usedbydataset 6.24G -
ztest usedbychildren 10.6M -
ztest usedbyrefreservation 0B -
ztest logicalused 6.24G -
ztest logicalreferenced 6.24G -
NAME PROPERTY VALUE SOURCE
ztest dedupratio 2.00x -
ファイルシステムは実際にプールに格納されているデータよりも2.00倍大きい論理データを参照するため、重複排除率は2.00です。ただし、 の出力では値が に増加したがほとんど変更されていないとzfs list
表示されます。より多くのコピーを作成しましょう。USED
6.25G
AVAIL
6.07G
# cp -vp /ztest/copy1.iso /ztest/copy3.iso
/ztest/copy1.iso -> /ztest/copy3.iso
# cp -vp /ztest/copy1.iso /ztest/copy4.iso
/ztest/copy1.iso -> /ztest/copy4.iso
# ls -lh /ztest; echo; zlist
total 13084690
-rw-r--r-- 1 jim jim 3.1G Jul 1 2014 copy1.iso
-rw-r--r-- 1 jim jim 3.1G Jul 1 2014 copy2.iso
-rw-r--r-- 1 jim jim 3.1G Jul 1 2014 copy3.iso
-rw-r--r-- 1 jim jim 3.1G Jul 1 2014 copy4.iso
NAME USED AVAIL REFER MOUNTPOINT
ztest 12.5G 6.07G 12.5G /ztest
ztest used 12.5G -
ztest referenced 12.5G -
ztest usedbysnapshots 0B -
ztest usedbydataset 12.5G -
ztest usedbychildren 10.6M -
ztest usedbyrefreservation 0B -
ztest logicalused 12.5G -
ztest logicalreferenced 12.5G -
NAME PROPERTY VALUE SOURCE
ztest dedupratio 4.00x -
それでは、du
12Gファイルを保存するとしましょう。
# du -h /ztest
12G /ztest
ただし、zpool
プールには3.14Gのデータしか割り当てられておらず、プールにはまだ6.36Gの未割り当て領域があることがわかります。
# zpool list ztest
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
ztest 9.50G 3.14G 6.36G - - 0% 33% 4.00x ONLINE -
ln
重複排除なしで使用するのと同じ
一方、重複排除機能のないファイルシステムは、同じ目的を達成するために慎重に使用でき、潜在的に複雑さ、RAM要件、および速度の観点からより低コストで使用できます。
# zpool destroy ztest
# zpool create ztest md0
# cp -vp ~jim/my-fave-dvd.iso /ztest/copy1.iso
/home/jim/my-fave-dvd.iso -> /ztest/copy1.iso
# ln /ztest/copy1.iso /ztest/copy2.iso
# ln /ztest/copy1.iso /ztest/copy3.iso
# ln -s /ztest/copy1.iso /ztest/copy4.iso
今、私たちはまだ4つの異なる場所(マスターコピーcopy1.iso
とレプリカcopy2
)からアクセスできるファイルを持っていますcopy4.iso
。
du
3.1Gファイルを保存したことを示します。
# du -h /ztest
3.1G /ztest
ls
多くのinode番号が同じで(ハードリンク)、1つのファイルがシンボリックリンクであることを示しています。を使用すると、ln
追加のストレージオーバーヘッドなしで同じファイルを複数の場所に配置できます。
# ls -lih /ztest
total 9813518
2 -rw-r--r-- 3 jim jim 3.1G Jul 1 2014 copy1.iso
2 -rw-r--r-- 3 jim jim 3.1G Jul 1 2014 copy2.iso
2 -rw-r--r-- 3 jim jim 3.1G Jul 1 2014 copy3.iso
128 lrwxr-xr-x 1 root wheel 16B Oct 7 13:25 copy4.iso -> /ztest/copy1.iso
zfsファイルシステムは、3.1Gが使用され、6.1Gが使用可能であることを示しています。
# zlist
NAME USED AVAIL REFER MOUNTPOINT
ztest 3.12G 6.08G 3.12G /ztest
ztest used 3.12G -
ztest referenced 3.12G -
ztest usedbysnapshots 0B -
ztest usedbydataset 3.12G -
ztest usedbychildren 189K -
ztest usedbyrefreservation 0B -
ztest logicalused 3.12G -
ztest logicalreferenced 3.12G -
NAME PROPERTY VALUE SOURCE
ztest dedupratio 1.00x -
また、zpool
3.12Gを割り当てており、6.38Gが利用可能であることを示しています。
# zpool list ztest
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
ztest 9.50G 3.12G 6.38G - - 0% 32% 1.00x ONLINE -
この例では、独自のテストフレームワークを開発してZFS重複排除を試し、コスト/利点の比率が適切であることを確認できます。
質問を避ける
ファイルサポート仮想デバイスのZFSプール実験フレームワークは、既存のシステムにZFSプールを追加するための長期的なソリューションではありません。ただし、これは現在のハードウェアが必要なリソースを提供できるかどうか、特定のユースケースのデータとデータ処理方法がZFSが提供する機能を利用できるかどうかを判断するのに役立ちます。
ZFSプールを追加することが理想的な目標であると判断された場合は、新しいディスクパーティションとファイルシステムで作業するたびに考慮すべきいくつかの一般的な前提条件があります。
- 最近バックアップしましたか?今それをする!
- ディスクにはすでに空のパーティションがありますか?とても便利です。
- 利用可能な無料パーティションはありませんか?もしそうなら、現在のファイルシステムにバックアップし、より小さなパーティションにサイズ変更し、新しい空き領域をZFS専用の新しいパーティションで使用できるようにデータを復元するのに十分な空き容量がありますか?
- より大きな新しいドライブを購入し、そこに適切なサイズのパーティションを作成して、現在のファイルシステムと新しいZFSパーティションをアーカイブできますか?
一度持っているもの:
- 既存のファイルシステムのバックアップ
- ZFS専用パーティション(私たちはこれと呼ばれます
/dev/sda3
) - ZFSプールをインストールする場所の決定
/tank
次のコマンドを使用して、既存のシステムにZFSプールを追加できます。
# zpool create tank /dev/sda3
必要に応じて、以下を使用して重複排除を有効にできます。
# zfs set dedup=on tank
これは非重複プールであることに注意してください。ドライブに障害が発生すると、データが失われます。 zpool scrub
ジョブはデータ破損を検出できますが、見つかったエラーを修正することはできません。
楽しむ!