ZFSは、Zettabyteファイルシステムの短縮形であり、高度で拡張性の高いファイルシステムです。もともとはSunMicrosystemsによって開発され、現在はOpenZFSプロジェクトの一部です。 Linuxで利用できるファイルシステムが非常に多いため、ZFSの何が特別なのかを尋ねるのはごく自然なことです。他のファイルシステムとは異なり、これは単なるファイルシステムではなく、論理ボリュームマネージャーでもあります。 ZFSの人気を高める機能のいくつかは次のとおりです。
- データの整合性-データの整合性と整合性は、コピーオンライトとチェックサムの手法によって保証されます
- ストレージスペースのプール-使用可能なストレージドライブは、zpoolと呼ばれる単一のプールにまとめることができます
- ソフトウェアRAID-RAIDアレイのセットアップは、単一のコマンドを発行するのと同じくらい簡単です。
- 組み込みのボリュームマネージャー-ZFSはボリュームマネージャーとしても機能します。
- スナップホット、クローン、圧縮-これらは、ZFSが提供する高度な機能の一部です。
ZFSは128ビットのファイルシステムであり、256ゼタバイトを格納する容量があります。このガイドでは、CentOS 7サーバーにインストール、セットアップ、およびいくつかの重要なZFSコマンドを使用する方法を学習します。
注:インストール部分はCentOSサーバーに固有ですが、コマンドはすべてのLinuxシステムで一般的です
用語
先に進む前に、ZFSで一般的に使用されているいくつかの用語を理解しましょう。
プール
ストレージドライブの論理グループ。これはZFSの基本的な構成要素であり、ここからデータセットにストレージスペースが割り当てられます。
データセット
ZFSファイルシステムのコンポーネント、つまりファイルシステム、クローン、スナップショット、ボリュームはデータセットと呼ばれます。
ミラー
2つ以上のディスクに同一のデータコピーを保存する仮想デバイス。 1つのディスクに障害が発生した場合、そのミラーの他のディスクで同じデータを利用できます。
再銀化
デバイスを復元する場合に、あるディスクから別のディスクにデータをコピーするプロセス。
スクラブ
スクラブは、他のファイルシステムでのfsckの使用方法と同様に、ZFSでの整合性チェックに使用されます
ZFSのインストール
CentOSにZFSをインストールするには、最初にサポートパッケージ用のEPELリポジトリをセットアップし、次に必要なZFSパッケージをインストールするためにZFSリポジトリをセットアップする必要があります。
注:rootユーザーでない場合は、すべてのコマンドの前にsudoを付けてください。
yum localinstall --nogpgcheck http://epel.mirror.net.in/epel/7/x86_64/e/epel-release-7-5.noarch.rpmyum localinstall --nogpgcheck http:// archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm
次に、カーネル開発パッケージとzfsパッケージをインストールします。 ZFSはモジュールとして構築され、カーネルに挿入されるため、カーネル開発パッケージが必要です。
yum install kernel-devel zfs
'lsmod'コマンドを使用してzfsモジュールがカーネルに挿入されているかどうかを確認し、挿入されていない場合は、'modprobe'コマンドを使用して手動で挿入します。
[root @ li1467-130〜]#lsmod | grep zfs [root @ li1467-130〜]#modprobe zfs [root @ li1467-130〜]#lsmod | grep zfszfs 2790271 0zunicode 331170 1 zfszavl 15236 1 zfszcommon 55411 1 zfsznvpair 89086 2 zfs、zcommonspl 92029 3 zfs、zcommon、znvpair
zfsコマンドを使用できるかどうかを確認しましょう:
[root @ li1467-130〜]#zfslist利用可能なデータセットがありません
管理
ZFSには、zpoolとzfsの2つの主要なユーティリティがあります。 zpoolはディスクを使用したプールの作成と保守を処理しますが、zfsユーティリティはデータセットの作成と保守を担当します。
zpoolユーティリティ
プールの作成と破棄
まず、ストレージプールを作成するために使用できるディスクを確認します。
[root @ li1467-130〜]#ls -l / dev / sd * brw-rw ---- 1ルートディスク8、0 Mar 16 08:12 / dev / sdabrw-rw --- -1ルートディスク8、16 Mar 16 08:12 / dev / sdbbrw-rw ---- 1ルートディスク8、32 Mar 16 08:12 / dev / sdcbrw-rw ---- 1ルートディスク8、48 Mar 16 08:12 / dev / sddbrw-rw ---- 1ルートディスク8、64 Mar 16 08:12 / dev / sdebrw-rw ---- 1ルートディスク8、80 Mar 16 08:12 / dev / sdf
ドライブのセットからプールを作成します。
zpool create
[root @ li1467-130〜]#zpool create -f zfspool sdc sdd sde sdf
「zpoolstatus」コマンドは、使用可能なプールのステータスを表示します
[root @ li1467-130〜]#zpool statuspool:zfspoolstate:ONLINEscan:none requestedconfig:NAME STATE READ WRITE CKSUMzfspool ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0sdf ONLINE 0 0 0errors :既知のデータエラーはありません
プールの作成が成功したかどうかを確認します。
<前>の [ルート@ li1467-130〜]#DF -hFilesystemは/ dev / sdaに19G 1.4G 17G 8%/ devtmpfs 488M 0 488M 0%/ devtmpfs 497M 0 497M 0%/にマウントされたサイズに使用AVAIL使用% DEV / shmtmpfs 497M 50M 447M 11%/ runtmpfs 497M 0 497M 0%/ SYS / FS / cgrouptmpfs 100M 0 100M 0%/実行/ユーザ/ 0zfspool 3.7gの0 3.7gの0%/ zfspool コード>
ご覧のとおり、zpoolはサイズ3.7 GBの「zfspool」という名前のプールを作成し、/zfspoolにもマウントしています。
プールを破棄するには、「zpooldestroy」コマンドを使用します
zpooldestroy<プール名>[root@ li1467-130〜]#zpool destroy zfspool [root @ li1467-130〜]#zpoolstatus利用可能なプールがありません
簡単なミラープールを作成してみましょう。
zpool create
また、mirrorキーワードの後にドライブを繰り返すことで、同時に複数のミラーを作成することもできます。
[root @ li1467-130〜]#zpool create -f mpool mirror sdc sdd mirror sde sdf [root @ li1467-130〜]#zpool statuspool:mpoolstate:ONLINEscan:none requestedconfig:NAME STATE READ WRITE CKSUMmpool ONLINE 0 0 0mirror-0 ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0mirror-1 ONLINE 0 0 0sde ONLINE 0 0 0sdf ONLINE 0 0 0errors:既知のデータエラーはありません
上記の例では、それぞれ2つのディスクを持つミラープールを作成しました。
同様に、raidzプールを作成できます。
[root @ li1467-130〜]#zpool create -f rpool raidz sdc sdd sde sdf [root @ li1467-130〜]#zpool statuspool:rpoolstate:ONLINEscan:none requestedconfig:NAME STATE READ WRITE CKSUMrpool ONLINE 0 0 0raidz1-0 ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0sdf ONLINE 0 0 0errors:既知のデータエラーはありません
ZFSプール内のデバイスの管理
プールが作成されると、ホットスペアとキャッシュデバイスをプールに追加またはプールから削除したり、ミラーリングされたプールにデバイスを接続または切り離したり、デバイスを交換したりすることができます。ただし、非冗長デバイスとraidzデバイスをプールから削除することはできません。このセクションでは、これらの操作のいくつかを実行する方法を説明します。
私は最初に、sdcとsddの2つのデバイスで構成される「testpool」というプールを作成しています。その後、別のデバイスsdeがこれに追加されます。
[root @ li1467-130〜]#zpool create -f testpool sdc sdd [root @ li1467-130〜]#zpool add testpool sde [root @ li1467-130〜]#zpool statuspool:testpoolstate:ONLINEscan :なしrequestedconfig:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0errors:既知のデータエラーはありません
前述のように、この新しく追加されたデバイスは冗長プールまたはraidzプールではないため、削除できません。
[root @ li1467-130〜]#zpool remove testpool sdecannot remove sde:非アクティブなホットスペア、キャッシュ、トップレベル、またはログデバイスのみを削除できます
ただし、このプールにスペアディスクを追加して削除することはできます。
[root @ li1467-130〜]#zpool add testpool Spare sdf [root @ li1467-130〜]#zpool statuspool:testpoolstate:ONLINEscan:none requestedconfig:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0sparessdf AVAILerrors:既知のデータエラーはありません[root @ li1467-130〜]#zpool remove testpool sdf [root @ li1467-130〜]#zpool statuspool:testpoolstate:ONLINEscan:none requestedconfig:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0sdc ONLINE 0 0sdd ONLINE 0 0sde ONLINE 0 0errors:知られていないデータエラーコード>
同様に、attachコマンドを使用してディスクをミラーリングされたプールまたはミラーリングされていないプールに接続し、detachコマンドを使用してディスクをミラーリングされたプールから切り離すことができます。
zpool attach zpool detach
デバイスに障害が発生したり破損したりした場合は、「replace」コマンドを使用してデバイスを交換できます。
zpool replace
ミラーリングされた構成でデバイスを強制的に破損することにより、これをテストします。
[root @ li1467-130〜]#zpool create -f testpool mirror sdd sde
これにより、ディスクsddとsdeで構成されるミラープールが作成されます。それでは、sddドライブにゼロを書き込んで、意図的に破損させましょう。
[root @ li1467-130〜]#dd if =/ dev / zero of =/ dev / sdddd:'/ dev / sdd'への書き込み:デバイスにスペースが残っていません2048001+0レコードin2048000+0レコードout1048576000バイト(1.0 GB)コピー、22.4804秒、46.6MB/秒
'scrub'コマンドを使用して、この破損を検出します。
[root @ li1467-130〜]#zpool scrub testpool [root @ li1467-130〜]#zpool statuspool:testpoolstate:ONLINEstatus:ラベルがないか無効であるため、1つ以上のデバイスを使用できませんでした。プールが劣化した状態で機能し続けるのに十分なレプリカが存在します。アクション:「zpoolreplace」を使用してデバイスを置き換えます。参照:http://zfsonlinux.org/msg/ZFS-8000-4Jscan:スクラブが0h0mで0を0エラーで修復しましたon Fri Mar 18 09:59:40 2016config:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0mirror-0 ONLINE 0 0 0sdd UNAVAIL 000破損したdatasdeONLINE0 0 0エラー:既知のデータエラーはありません
sddをsdcに置き換えます。
[root @ li1467-130〜]#zpool replace testpool sdd sdc; zpool statuspool:testpoolstate:ONLINEscan:resilvered 83.5K in 0h0m with 0 errors on Fri Mar 18 10:05:17 2016config:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0mirror-0 ONLINE 0 0 0replacing-0 UNAVAIL 0 0 0sdd UNAVAIL 0 0 0破損したdatasdcONLINE0 0 0sde ONLINE 0 0 0エラー:既知のデータエラーはありません[root @ li1467-130〜]#zpool statuspool:testpoolstate:ONLINEscan:0h0mで74.5Kを再シルバー化し、金曜日3月18日10:00:362016configに0エラー:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0mirror-0 ONLINE 0 0 0sdc ONLINE 0 0 0sde ONLINE 0 0 0errors:既知のデータエラーはありません
プールの移行
exportコマンドとimportコマンドを使用して、異なるホスト間でストレージプールを移行できます。このため、プールで使用されるディスクは両方のシステムから利用可能である必要があります。
[root @ li1467-130〜]#zpool export testpool [root @ li1467-130〜]#zpoolstatus利用可能なプールがありません
コマンド'zpoolimport'は、インポートに使用できるすべてのプールを一覧表示します。プールをインポートするシステムからこのコマンドを実行します。
[root @ li1467-131〜]#zpool importpool:testpoolid:3823664125009563520state:ONLINEaction:プールは、その名前または数値識別子を使用してインポートできます。config:testpool ONLINEsdc ONLINEsdd ONLINEsde ONLINE
次に、必要なプールをインポートします
[root @ li1467-131〜]#zpool import testpool [root @ li1467-131〜]#zpool statuspool:testpoolstate:ONLINEscan:none requestedconfig:NAME STATE READ WRITE CKSUMtestpool ONLINE 0 0 0sdc ONLINE 0 0 0sdd ONLINE 0 0 0sde ONLINE 0 0 0errors:既知のデータエラーはありません
iostat
iostatコマンドを使用して、プールデバイスのio統計を確認できます。
[root @ li1467-130〜]#zpool iostat -vtestpoolcapacityoperationsbandwidthpool-読み取り----読み取り---- --- ----- ----- -----試験プール1.80M 2.86G 22 27 470K 417Ksdc 598K 975M 8 9 200K 139Ksdd 636K 975M 7 9 135K 139Ksde 610K 975M 6~9 135K 139K ----- ----- ----- ----- ----- ----- ----- ----- -
zfsユーティリティ
次に、zfsユーティリティに移ります。ここでは、データセット、ファイルシステムの圧縮、割り当て、スナップショットを作成、破棄する方法を見ていきます。
ファイルシステムの作成と破棄
ZFSファイルシステムは、zfscreateコマンドを使用して作成できます
zfs create
[root @ li1467-130〜]#zfs create testpool / student [root @ li1467-130〜]#zfs create testpool / Professors [root @ li1467-130〜]#df-hFilesystemサイズ使用済み%2.8の/ dev / sdaに19G 1.4G 17G 8%/ devtmpfs 488M 0 488M 0%/ devtmpfs 497M 0 497M 0%は/ dev / shmtmpfs 497M 50M 447M 11%/ runtmpfs 497M 0 497M 0%/ SYS / FS / cgrouptestpoolにマウントG 0 2.8G 0%/ testpooltmpfs 100M 0 100M 0%/実行/ユーザー/ 0testpool /学生2.8G 0 2.8G 0%/ testpool / studentstestpool / Professors 2.8G
上記の出力から、ファイルシステムの作成時にマウントポイントは指定されていませんが、マウントポイントはプールと同じパス関係を使用して作成されていることに注意してください。
zfs createでは、-oを使用して、mountpoint、compression、quota、execなどのオプションを指定できます。
zfs listを使用して利用可能なファイルシステムを一覧表示できます:
の [ルート@ li1467-130〜]#ZFSリスト名USED AVAIL MOUNTPOINTtestpool 100M 2.67G 19K / testpooltestpool /教授31K 1024M 20.5K /試験プール/ professorstestpool /学生1.57M 98.4M 1.57M /試験プール/学生をREFER
破棄オプションを使用してファイルシステムを破棄できます
zfs destroy
圧縮
これで、ZFSで圧縮がどのように機能するかを理解できます。圧縮の使用を開始する前に、「setcompression」を使用して圧縮を有効にする必要があります
zfs set
これが行われると、圧縮と解凍がファイルシステム上で透過的に実行されます。
この例では、lz4圧縮アルゴリズムを使用してstudentsディレクトリで圧縮を有効にします。
[root @ li1467-130〜]#zfs set Compression =lz4 testpool / student
サイズ15Mのファイルをこのファイルシステムにコピーし、コピーしたらサイズを確認します。
[root @ li1467-130 /]#cd / var / log [root @ li1467-130 log]#du -h secure15M secure [root @ li1467-130〜]#cp / var / log / secure / testpool / students / [root @ li1467-130 student]#df -h.Filesystem使用済みAvailUse%マウントされたontestpool / student 100M 1.7M 99M s tu
ファイルシステムで使用されるサイズはわずか1.7Mであるのに対し、ファイルサイズは15Mであることに注意してください。圧縮率も確認できます。
[root @ li1467-130〜]#zfs get compressratio testpoolNAME PROPERTY VALUE SOURCEtestpool compressratio 9.03x
-
割り当てと予約
実際の例でクォータについて説明しましょう。大学で、教授と学生のためにファイルシステムが使用するディスク容量を制限する必要があるとします。学生に100MB、教授に1GBを割り当てる必要があると仮定します。この要件を満たすために、ZFSの「クォータ」を利用できます。クォータは、ファイルシステムによって使用されるディスク容量が設定された制限を超えないようにします。予約は、ファイルシステムに必要なディスク容量を実際に割り当てて保証するのに役立ちます。
zfs setquota = zfs set reserved =
[root @ li1467-130〜]#zfs setquota =100M testpool / student [root @ li1467-130〜]#zfs set reserved =100M testpool / student [root @ li1467-130〜]#zfs LISTNAMEはAVAILがMOUNTPOINTtestpool 100M 2.67G 19K / testpooltestpool /教授19K 2.67G 19K /試験プール/ professorstestpool /学生1.57M 98.4M 1.57M /試験プール/学生[ルート@ li1467-130〜]#ZFSセット・クォータをREFER USED =1Gの試験プール/教授[ルート@ li1467-130〜]#ZFSリスト名USED AVAILはMOUNTPOINTtestpool 100M 2.67G 19K / testpooltestpool /教授19K 1024M 19K /試験プール/ professorstestpool /学生1.57M 98.4M 1.57M /試験プール/学生
をREFER
上記の例では、学生に100MB、教授に1GBを割り当てています。 「zfslist」の「AVAIL」列を確認します。当初はそれぞれ2.67GBのサイズでしたが、割り当てを設定した後、それに応じて値が変更されました。
スナップショット
スナップショットは、特定の時点でのZFSファイルシステムの読み取り専用コピーです。それらはzfsプールの余分なスペースを消費しません。後の段階で同じ状態にロールバックすることも、ユーザーの要件に応じて1つまたは一連のファイルのみを抽出することもできます。
次に、前の例の「/ testpool / Professors」の下にいくつかのディレクトリとファイルを作成し、このファイルシステムのスナップショットを作成します。
[root @ li1467-130〜]#cd / testpool / professors / [root @ li1467-130 professors]#mkdir maths physics chemistry [root @ li1467-130 professors]#cat> qpaper.txtQuestion paper for 2016-17年[root@li1467-130教授]#ls -latotal 4drwxr-xr-x 5 root root 6 Mar 19 10:34 .drwxr-xr-x 4 root root 4 Mar 19 09:59 ..drwxr- xr-x 2 root root 2 Mar 19 10:33 chemistrydrwxr-xr-x 2 root root 2 Mar 19 10:32 mathsdrwxr-xr-x 2 root root 2 Mar 19 10:32 physics-rw-r--r-- 1 root root 36 Mar 19 10:35 qpaper.txt
スナップショットを作成するには、次の構文を使用します。
zfsスナップショット
>
を[ルート@ li1467-130教授]#ZFSスナップショット試験プール/教授@ 03から2016 [ルート@ li1467-130教授] snapshotNAME -t#ZFSリストAVAILは/ MOUNTPOINTtestpool参照教授@ USED 03から2016 0 - 20.5K-
作成したファイルを削除して、スナップショットから抽出します
[root @ li1467-130 professors]#rm -rf qpaper.txt [root @ li1467-130 professors]#lschemistry maths physics [root @ li1467-130 professors]#cd .zfs [root @ li1467- 130 .zfs]#cdsnapshot / 03-2016 / [root @ li1467-130 03-2016]#lschemistry maths physics qpaper.txt [root @ li1467-130 03-2016]#cp -a qpaper.txt / testpool / Professors / [root @ li1467-130 03-2016]#cd / testpool / professors / [root @ li1467-130 professors]#lschemistry maths physics qpaper.txt
削除されたファイルは元の場所に戻ります。
zfs listを使用して、使用可能なすべてのスナップショットを一覧表示できます。
[root @ li1467-130〜]#zfs list -tsnapshotNAME
最後に、zfsdestroyコマンドを使用してスナップショットを破棄しましょう:
zfs destroy
>
[root @ li1467-130〜]#zfs destroy testpool / Professors @ 03-2016 [root @ li1467-130〜]#zfs list-tsnapshotnoデータセットが利用可能
結論
この記事では、CentOS 7にZFSをインストールし、zpoolおよびzfsユーティリティからいくつかの基本的で重要なコマンドを使用する方法を学習しました。これは包括的なリストではありません。 ZFSにはさらに多くの機能があり、公式ページからさらに詳しく調べることができます。
Cent OS