訳註: これは作業してる最中のもので、本来、訳作業者以外は見えぬべきものです。 訳作業者以外は見ないでください。意味が反対になったりとか当然にあるから、 内容は利用しないでください。この言語への変換作業(翻訳作業)物に関しては、現在、オープンなライセンス条件ではありません。 十進240のコードのキャラクターを<240>に置換してる場合あり
Chapter17.NetBSD Logical Volume Manager (LVM) configuration

Table of Contents

17.1. Anatomy of NetBSD Logical Volume Manager
17.2. Install physical media
17.3. Configure Kernel Support
17.4. Configure LVM on a NetBSD system
17.5. Disklabel each physical volume member of the LVM
17.6. Create Physical Volumes
17.7. Create Volume Group
17.8. Create Logical Volume
17.9. Example: LVM with Volume groups located on raid1
17.9.1. Loading Device-Mapper driver
17.9.2. Preparing raid1 installation
17.9.3. Creating PV, VG on raid disk
17.9.4. Creating LV's from VG located on raid disk
17.9.5. Integration of LV's in to the system

NetBSD LVM は NetBSD システム上 で logical volume management をさせるもので、 Linux LVM2 ツールと同じ、良く知られたユーザーインターフェースのものです。

NetBSD LVM は、 NetBSD にわざわざ書かれた BSD-ライセンス の device-mapper カーネルドライバーと一緒に Linux lvm2tools および libdevmapper の on で built ました。

LVM ドライバーは 利用可能なディスクスペースを効果的で効率的に manage することをユーザーに許します。 幾つかのディスクおよびパーティションからのディスクスペースは Physical Volumes として知られ、 Volume Groups に追加可能で、 Logical Partitions aka Logical Volumes が利用可能なディスクスペースのプールです。

論理ボリュームは LVM ユーティリティーを使って、拡張および縮小ができます。

基本 building ブロックが物理ボリュームです。これは データの貯蔵に使われるディスク、あるいはディスクの一部です。

物理ボリュームは、ボリュームグループまたは VGs を作るために一緒に統合されます。 . 典型的に、ボリュームグループは、 同じ機能ユニット[functional unit]の集合記憶装置に使われます。 典型的ボリュームグループはかように名づけることができます AudioMultimedia あるいは Documents 。 分離した記憶装置 requirements in この functional way, 同じ種類の 回復力および冗長性は機能ユニット全体にあてはまります。

LVM のセットアップに必要なステップは次の通り:

  1. 物理メディアの設置

  2. カーネル対応の設定

  3. システムの設定、ツールのインストール

  4. 任意のステップ

    LVM の各 volume member にディスクラベルをつける

  5. LVM ディスクデバイスの初期化

  6. 初期化されたディスクからのボリュームグループ作り

  7. 作成されたボリュームグループからの論理ボリューム作り

  8. 新 LV デバイス上へのファイルシステム作り

  9. LV ファイルシステムのマウント

この例は NetBSD/i386 上で LVM setup を features .

17.1.Anatomy of NetBSD Logical Volume Manager

Figure17.1.Anatomy of Logical Volume Management

Anatomy of Logical Volume Management

  1. Volume Group(ボリュームグループ、 VG)

    ボリュームグループはディスクスペースプールに付けられた名前で、 そこからユーザーは論理ボリュームをつくったり、物理ボリュームの追加先のものです。 NetBSD LVM 実装の基本管理単位です。

  2. Physical Volume(物理ボリューム、 PV)

    物理ボリュームは LVM 構造の基本 unit です。各 PV は Physical Extends と呼ばれる 小さなディスクスペース chunks から consist 。 各ボリュームグループは少なくても一つの PV を持たなければなりません。 PV はハードディスクまたは、 raid 、 ccd 、 cgd デバイスのような ハードディスクらしいデバイスの上に作ることができます。

  3. Logical Volume(論理ボリューム、 LV)

    論理ボリュームは、ボリュームグループに割り当てられたディスクスペースからできている 論理パーティションです。 LV は他のいかなる pseudo-disk デバイスと同様、 newfs でき、 mount できます。 Lvm ツールは LV を作るために カーネルの device-mapper ドライバーが exported した functionality を使います。

  4. Physical Extents

    各物理ボリュームはディスクスペースの divided chunks です。 Default サイズは 4MB です。 あらゆる LV のサイズは PE のサイズで丸められたサイズです。 LV は ボリュームグループ中の Physical extends へのマッピングでできています。

  5. Logical Extents

    各論理ボリュームは logical extents として知られる ディスクスペースの chunks に分割されています。 ボリュームグループ中の全ての論理ボリュームの extent サイズは同じです。

  6. Physical Extents mapping

    全ての LV は標的マッピングによって PEs にマップされた LEs で できています。 現在、これらの mappings が定義されています。

    • Linear Mapping

      は線形的に PE の範囲を LE に割り当てます。

      例えば PV 1 から 100 PE を、
                         他の 100 PE は PV 0 からのを LV 1 にマップすることができます。
    • Stripe Mapping

      は幾つかの物理ボリュームにわたる logical extents の chunks をインターリーブします 。

  7. Snapshots

    LVM が提供する容易さは 'snapshots' です。標準 NetBSD とはいえ、 fss ドライバーは、ファイルシステムレベルでファイルシステムのスナップショットを 提供するのに使うことができ、 LVM のスナップショットの才能は、 管理者に、論理ボリュームのある時間時点で凍結した正確なコピーを提出する 論理ブロックデバイスを作ることを認めます。 この才能は、論理ボリューム上のデータが 整合状態の時にスナップショットが作られることを要求します。

    Warning

    スナップショット機能は NetBSD の LVM では完全実装されていないので、 研究成果として使えないはずです。

17.2.Install physical media

このステップはあなた自身の判断でプラットホームや ハードウェアは自由に使ってください。 LVM は、ディスクラベルパーティションや fdisk で作った標準パーティションでさえも使えます。

私の dmesgでは:

Disk #1:
            probe(esp0:0:0): max sync rate 10.00MB/s
            sd0 at scsibus0 target 0 lun 0: <SEAGATE, ST32430N SUN2.1G, 0444> SCSI2 0/direct fixed
            sd0: 2049 MB, 3992 cyl, 9 head, 116 sec, 512 bytes/sect x 4197405 sectors
            
            Disk #2
            probe(esp0:1:0): max sync rate 10.00MB/s
            sd1 at scsibus0 target 1 lun 0: <SEAGATE, ST32430N SUN2.1G, 0444> SCSI2 0/direct fixed
            sd1: 2049 MB, 3992 cyl, 9 head, 116 sec, 512 bytes/sect x 4197405 sectors
            
            Disk #3
            probe(esp0:2:0): max sync rate 10.00MB/s
            sd2 at scsibus0 target 2 lun 0: <SEAGATE, ST11200N SUN1.05, 9500> SCSI2 0/direct fixed
            sd2: 1005 MB, 1872 cyl, 15 head, 73 sec, 512 bytes/sect x 2059140 sectors
            
            Disk #4
            probe(esp0:3:0): max sync rate 10.00MB/s
            sd3 at scsibus0 target 3 lun 0: <SEAGATE, ST11200N SUN1.05, 8808 > SCSI2 0
            sd3: 1005 MB, 1872 cyl, 15 head, 73 sec, 512 bytes/sect x 2059140 sectors

17.3.Configure Kernel Support

次のカーネル設定命令は LVM デバイスサポートの提供に必要です。 それはカーネルモジュールとして提供され、それで、標準 NetBSD カーネルに 特別な変更がいりません。 dm ドライバーはカーネルモジュールとして提供され、それは NetBSD 6.0 リリースに最初に現れました。

your システムがモジュールを使わないなら、 NetBSD でこの行をカーネル設定ファイルに加えることで dm ドライバーを有効化できます。これでカーネルに device-mapper ドライバーを加え、静的リンクモジュールとしてリンクします。

      pseudo-device dm
    

LVM サポートのためだけにカーネルの再構築をしたくないなら、 dm カーネルモジュールが使えます。 your システムに devmapper カーネルモジュールが 「cam be loaded on」 ロードできます。カーネル内のモジュールの現在の状況を得るには、 modstat が使え:

vm1# modstat
        NAME            CLASS   SOURCE  REFS    SIZE    REQUIRES
        cd9660          vfs     filesys 0       21442   -
        coredump        misc    filesys 1       2814    -
        exec_elf32      misc    filesys 0       6713    coredump
        exec_script     misc    filesys 0       1091    -
        ffs             vfs     boot    0       163040  -
        kernfs          vfs     filesys 0       10201   -
        ptyfs           vfs     filesys 0       7852    -

modload dm を発令すると、 dm カーネルモジュールがロードされ:

vm1# modstat
          NAME            CLASS   SOURCE  REFS    SIZE    REQUIRES
          cd9660          vfs     filesys 0       21442   -
          coredump        misc    filesys 1       2814    -
          dm              misc    filesys 0       14448   -
          exec_elf32      misc    filesys 0       6713    coredump
          exec_script     misc    filesys 0       1091    -
          ffs             vfs     boot    0       163040  -
          kernfs          vfs     filesys 0       10201   -
          ptyfs           vfs     filesys 0       7852    -

17.4.Configure LVM on a NetBSD system

LVM の利用には、 lvm2tools および libdevmapper を NetBSD システムにインストールする必要があります。 これらの ツールおよびライブラリーは default では有効ではありません。

LVM ツールの build を有効にするには、 /etc/mk.conf または MAKECONF ファイル中に MKLVM=yes を設定してください。

17.5.Disklabel each physical volume member of the LVM

LVM 中の各物理ボリュームディスクは確立した特殊ファイルシステムが必要です。この例では disklabel が必要となり:


/dev/rsd0d
/dev/rsd1d
/dev/rsd2d
/dev/rsd3d

システム上でディスクデバイスに見え、標準ファイルシステム空間を作る NetBSD vnd ドライバーが使えるということを心に留めておくべきです。

キャラクターデバイスにディスクラベルをつけることを常に念頭においてください、 ブロックデバイスではなく、 /dev/r{s,w}d*

i386 以外の全プラットホームで d パーティションを ここでは使います。 c スライスは NetBSD パーティション全体の象徴で予約されています。

LVM の物理ボリュームディスクに、以前から存在していたディスクラベルは除去したいでしょう。 これは dd(1) コマンドで 2つの方法で果たすことができ:

# dd if=/dev/zero of=/dev/rsd0d bs=8k count=1
            # dd if=/dev/zero of=/dev/rsd1d bs=8k count=1
            # dd if=/dev/zero of=/dev/rsd2d bs=8k count=1
            # dd if=/dev/zero of=/dev/rsd3d bs=8k count=1

ディスクのパーティションに MBR (Master Boot Record) を使う port では、 NetBSD パーティションはディスク全体の一部分に過ぎず、 他の OS 、 Windows や Linux が他の部分を使いますが、 このコマンドを使って MBR およびディスクの全パーティションを無効にでき:

# dd if=/dev/zero of=/dev/rsd0d bs=8k count=1
            # dd if=/dev/zero of=/dev/rsd1d bs=8k count=1
            # dd if=/dev/zero of=/dev/rsd2d bs=8k count=1
            # dd if=/dev/zero of=/dev/rsd3d bs=8k count=1 

これでディスク全体の全データがアクセスできなくなります。 註として、ディスク全体は、 i386 (といくつか他の ports)では スライス d 、および、ほか(例: sparc では) c です。 kern.rawpartition sysctl を見て - "3" なら "d" 、 "2" なら "c" です。

このディスクの default ディスクラベルはこのようなものでしょう:

# disklabel -r sd0
            [...snip...]
            bytes/sector: 512
            sectors/track: 63
            tracks/cylinder: 16
            sectors/cylinder: 1008
            cylinders: 207
            total sectors: 208896
            rpm: 3600
            interleave: 1
            trackskew: 0
            cylinderskew: 0
            headswitch: 0           # microseconds
            track-to-track seek: 0  # microseconds
            drivedata: 0 
            
            4 partitions:
            #        size    offset     fstype [fsize bsize cpg/sgs]
            a:    208896         0     4.2BSD      0     0     0  # (Cyl.      0 -    207*)
            d:    208896         0     unused      0     0        # (Cyl.      0 -    207*)

ディスクの NetBSD パーティション上に、パーティション全体を消費する ひとつの slice を作る必要があります。 スライスはディスクのディスクラベル部分の終わりの少なくても2セクター後から始まる必要があります。 i386 では、それはセクター 63です。 それゆえ、 size 値は total sectors 引く 2x sectorsである必要があります。ディスクラベルをしかるべく編集し:

# disklabel -e sd0

type 4.2BSD のスライスのオフセットは sectors 値の倍数である必要があります。

ディスクラベルの編集の前に、 export EDITOR=[あなたの好きなエディターのパス] を手配してください。

スライスは fstype 4.2BSD の必要があります。

このパーティション上に1つのスライスだけなので、 d スライス (通常、象徴的利用法で予約されてます)をリサイクルできます。ディスクラベルを次のように変更し:

3 partitions:
            #        size   offset    fstype   [fsize bsize   cpg]
            d:  4197403       65      4.2BSD                       # (Cyl. 1 - 4020*)

任意として、 d 以外のスライスで setup でき、単純にしかるべく調整して以下のように:

3 partitions:
            #        size   offset    fstype   [fsize bsize   cpg]
            a:  4197403       65      4.2BSD                       # (Cyl. 1 - 4020*)
            c:  4197405       0       unused     1024  8192        # (Cyl. 0 - 4020*)

完了したら確実にラベルが書かれるよう手配してください。 Disklabel はあなたのディスクラベルの健全性をチェックして、パスしなかったら再編集するように促します。 Be sure to write the label when you have completed. Disklabel will object to your disklabel and prompt you to re-edit if it does not pass its sanity checks.

17.6.Create Physical Volumes

一旦全てのディスクに適切なラベルがつけられると、 その上に物理ボリュームを作りたくなるでしょう。 LVM に added された各パーティション/ディスクは その 先頭start に物理ボリュームヘッダーを持つ必要があります。 物理ボリュームが属するボリュームグループのような全情報は このヘッダーに蓄えられます。

                # lvm pvcreate /dev/rwd1[ad]
    

物理ボリュームの状態は pvdisplay コマンドで見られます。

          # lvm pvdisplay
    

17.7.Create Volume Group

一旦、全ディスクが物理ボリュームヘッダーで適切なラベル付けがされたら、 ボリュームグループはそれらから作られる必要があります。 ボリュームグループは PE のプールで、そこから管理者が論理ボリューム パーティションをつくれます。

            # lvm vgcreate vg0 /dev/rwd1[ad]
    
  • vg0 はボリュームグループの名前

  • /dev/rwd1[ad] は物理ボリューム

ボリュームグループは後から、 vgextend および vgreduce コマンドで extended/reduced できます。 これらのコマンドは VG に物理ボリュームを adds 。

          # lvm vgextend vg0 /dev/rwd1[ad]
          
          # lvm vgreduce vg0 /dev/rwd1[ad]
    

ボリュームグループの状態は vgdisplay コマンドでみることができます。

          # lvm vgdisplay vg0
    

17.8.Create Logical Volume

一度ボリュームグループが作られると、管理者は 論理パーティション ボリュームを作れます。

            # lvm lvcreate  -L 20M -n lv1 vg0
    
  • vg0 はボリュームグループの名前

  • -L 20M は論理ボリュームのサイズ

  • -n lv1 は論理ボリュームの名前

論理ボリュームは後から lvextend および lvreduce コマンドで extended/reduced できます。

          # lvm lvextend -L+20M /dev/vg0/lv1
          
          # lvm lvreduce -L-20M /dev/vg0/lv1
      

lv パーティションを縮小するには、先にファイルシステムの縮小が必要で、 NetBSD ffs2 は現在サポートしていません。

論理ボリュームの状態は lvdisplay コマンドで見られます。

          # lvm lvdisplay lv0/lv1
    

reboot 後、定義されたボリュームグループ中の全 functional LV はこのコマンドで activated でき

          # lvm vgchange -a y
      

17.9.Example: LVM with Volume groups located on raid1

raid 1 ディスクをボリュームグループの物理ボリュームディスクとして利用する動機は、 ディスクの信頼性です。 raid 1 ディスク上の PV で、ディスク故障の後さえも論理ボリュームを使うことができます。

17.9.1.Loading Device-Mapper driver

LVM ツールを start work する前に。 NetBSD dm ドライバーがカーネルの中あるいはロードされたモジュールとして 正しくコンパイルされているように手配する必要があります。 見つけるいちばん簡単な方法は、 dm ドライバーが利用可能か modstat を run して 見ることです。更なる情報は Configure Kernel Support chapter を御覧ください。

17.9.2.Preparing raid1 installation

次の raid 設定例は Raid 1 configuration で defined て、 ユーザーは raid1 ディスクデバイスを clean に構成します。ミラーモードで 2 つのディスクです。

Figure17.2.Example raid 1 configuration

# vi /var/tmp/raid0.conf
START array
1 2 0

START disks
/dev/wd2a
/dev/wd1a

START layout
128 1 1 1

START queue
fifo 100
# raidctl -v -C /var/tmp/raid0.conf raid0
raid0: Component /dev/wd1a being configured at col: 0
Column: 0 Num Columns: 0
Version: 0 Serial Number: 0 Mod Counter: 0
Clean: No Status: 0
Column out of alignment for: /dev/wd2a
Number of columns do not match for: /dev/wd2a
/dev/wd2a is not clean!
raid0: Component /dev/wd1a being configured at col: 1
Column: 0 Num Columns: 0
Version: 0 Serial Number: 0 Mod Counter: 0
Clean: No Status: 0
Column out of alignment for: /dev/wd1a
Number of columns do not match for: /dev/wd1a
/dev/wd1a is not clean!
raid0: There were fatal errors
raid0: Fatal errors being ignored.
raid0: RAID Level 1
raid0: Components: /dev/wd2a /dev/wd1a
raid0: Total Sectors: 19540864 (9541 MB)
# raidctl -v -I 2004082401 raid0
# raidctl -v -i raid0
Initiating re-write of parity
# tail -1 /var/log/messages
raid0: Error re-writing parity!
# raidctl -v -s raid0
Components:
/dev/wd2a: optimal
/dev/wd1a: optimal
No spares.
Component label for /dev/wd1a:
Row: 0, Column: 1, Num Rows: 1, Num Columns: 2
Version: 2, Serial Number: 2004082401, Mod Counter: 7
Clean: No, Status: 0
sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 19540864
RAID Level: 1
Autoconfig: No
Root partition: No
Last configured as: raid0
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.
Component label for /dev/wd2a:
Row: 0, Column: 1, Num Rows: 1, Num Columns: 2
Version: 2, Serial Number: 2004082401, Mod Counter: 7
Clean: No, Status: 0
sectPerSU: 128, SUsPerPU: 1, SUsPerRU: 1
Queue size: 100, blocksize: 512, numBlocks: 19540864
RAID Level: 1
Autoconfig: No
Root partition: No
Last configured as: raid0
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.
        

raid の設定の後、 raid ディスク上に ディスクラベルを作る必要があります。

i386 では:

 # disklabel -r -e -I raid0
type: RAID
disk: raid
label: fictitious
flags:
bytes/sector: 512
sectors/track: 128
tracks/cylinder: 8
sectors/cylinder: 1024
cylinders: 19082
total sectors: 19540864
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0

#        size    offset     fstype [fsize bsize cpg/sgs]
a:  19540789        65     4.2BSD      0     0     0  # (Cyl.      0 - 18569)
d:  19540864         0     unused      0     0        # (Cyl.      0 - 19082*)

sparc64 では:

# disklabel -r -e -I raid0
[...snip...]
total sectors: 19539968
[...snip...]
2 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
a:  19540793        65     4.2BSD      0     0     0  # (Cyl.      0 -  18799)
c:  19539968         0     unused      0     0        # (Cyl.      0 -  19081)

パーティションがオフセット 65 で作られるのは、セクター < 65 は読み込み専用と マークされていて、ゆえに再書き込みできないからです。 Partitions should be created with offset 65, because sectors < than 65 sector are marked as readonly and therefore can't be rewriten.

17.9.3.Creating PV, VG on raid disk

物理ボリュームは、いかなるディスクのようなデバイスの上にも、 またその上のいかなるパーティションの上にも作ることができ sparc64 c パーティション上の a または d がつかえます。 PV は LVM を使うと選ばれたパーティションに label し、 およびそれに必要とされる情報を加えます。

PV はキャラクターディスクデバイスエントリーとして作られます。 NetBSD でのほかのいかなるディスク操作と同じように。

# lvm pvcreate /dev/rraid0a 
      

our 例の目的では、 vg00 ボリュームグループをつくります。 vgcreate コマンドの最初のパラメーターはボリュームグループ名で、2番目は PV が raid 上につくられます。もし、後に VG のサイズが十分ではないと判り、 より多くのスペースが必要になったら、 vgextend コマンドで追加できます。

# lvm vgcreate vg00 /dev/rraid0a

# lvm vgextend vg00 /dev/rraid1a
      

Warning

もし、ボリュームグループに raid ではない PV を追加すると、 データはもはや安全ではなくなります。 それゆえ、データの安全性を維持したいなら、 VG には raid ベースの PV を 追加してください。

17.9.4.Creating LV's from VG located on raid disk

our 例の目的のために、 lv0 という名前の論理ボリュームをつくります。 もし、後に LV のサイズが十分でないと判ったら、 lvresize コマンドで追加できます。

LV の resize をしたらファイルシステムの resize が必要です。 さもないと、 LV をマウントしたとき、ファイルシステムの何の変化も見えません。

Warning

ffs ファイルシステムの縮小は NetBSD ではサポートされていないことを承知して。 ファイルシステムがついてて、縮小を play してみたいなら、 LV の縮小の前に、それを縮小させることが必要です。

これが意味するのは、 -L-* オプションは NetBSD では利用できませんです

# lvm lvcreate -n lv0 -L 2G vg00

# lvm lvresize -L+2G vg00/lv0
      

全 lv デバイスノードは、 /dev/vg00/ ディレクトリー中に作られます。 LV 上のファイルシステムはこのコマンドで作れます。 ファイルシステム作成の後、 LV はシステムにマウントできます。

# newfs -O2 /dev/vg00/rlv0
        
# mount /dev/vg00/lv0 /mnt/
      

17.9.5.Integration of LV's in to the system

boot 中に LV を検出し有効にする lvm rc.d スクリプトを、正しい LVM 統合のため、有効にする必要があります。 /etc/fstab ファイルに 論理ボリュームの entry を追加しなければなりません。

# cat /etc/rc.conf
[snip]
lvm=yes
      
# cat /etc/fstab
/dev/wd0a               /       ffs     rw               1 1
/dev/vg00/lv0           /lv0/   ffs     rw               1 1
[snip]