既存のドライブにZFSパーティションを作成する

既存のドライブにZFSパーティションを作成する

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

lnZFSを追加すると、使用するまで覚えておく必要がないという即時の利点がありますcp。メディアを意図的に分割、変更、編集、並べ替えるなど、さまざまなユースケースがあります。個々のメディア「クリップ」を保存すると、ZFSで行われます。データ重複排除の利点をお楽しみください。

ZFSのコストは、重複排除がかなりRAM集約的であるということです。カーネルは、各ブロックのチェックサムまたはハッシュをディスクに保存し、ブロックがプールに書き戻されると、リアルタイムでアレイにアクセスする必要があります。したがって、ディスクがいっぱいになると(より多くのZFSブロックが書き込まれる)、カーネルが各ブロックデータのハッシュをキャッシュするため、より多くのRAMがいっぱいになります。ノートブック内のRAMの容量とディスクの数によっては問題になる可能性がありますが、重複排除の主なコストは、ディスク全体のハッシュアレイを格納するのに十分なRAMを確保することにあることを覚えておくことをお勧めします。より少ないRAMで実行できますが、ハッシュ配列全体を一度に保持するのに十分なRAMがないシステムでは、カーネルがRAMチャンクでハッシュ配列をRAMの内外に交換しようとすると、特に書き込みアクセスが困難になります。

ただし、小さなZFSプールを試す1つの方法は次のとおりです。

仮想ブロックデバイスの作成

ここではFreeBSDコマンドを使用していますが、手順はUbuntuでも似ています。私が例示したブロックデバイスのサイズは10Gですが、空き容量がある場合は、より大きなサイズを使用できます。

  • ztest.dat10Gファイルを生成します。

    # 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表示されます。より多くのコピーを作成しましょう。USED6.25GAVAIL6.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  -

それでは、du12Gファイルを保存するとしましょう。

# 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

du3.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  -

また、zpool3.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ジョブはデータ破損を検出できますが、見つかったエラーを修正することはできません。

楽しむ!

関連情報