Index: chap-lvm.html =================================================================== RCS file: chap-lvm.html diff -N chap-lvm.html --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ chap-lvm.html 21 Aug 2008 19:51:33 -0000 @@ -0,0 +1,385 @@ + + + + +Chapter 16. NetBSD Logical Volume Manager configuration + + + + + + + + + +
+

+Chapter 16. NetBSD Logical Volume Manager configuration

+
+

Table of Contents

+
+
16.1. Anatomy of NetBSD Logical Volume Manager
+
16.2. Install physical media
+
16.3. Configure Kernel Support
+
16.4. Configure NetBSD system
+
16.5. Disklabel each physical volume member of the LVM
+
16.6. Create Physical Volumes
+
16.7. Create Volume Group
+
16.8. Create Logical Volume
+
+
+

NetBSD LVM is build on Linux lvm2tools and libdevmapper with device-mapper kernel driver + written for NetBSD.

+

The LVM driver allows the user to manage available disk space. Disk space + from several disks, partitions can be added to “Volume Groups”, which is pool + available disk space for “Logical Partitions” + aka Logical Volumes.

+

The steps required to setup a LVM are as follows:

+
    +
  1. Install physical media

  2. +
  3. Configure kernel support

  4. +
  5. Configure system, install tools

  6. +
  7. +

    + Optional step +

    +

    Disklabel each volume member of the LVM

    +
  8. +
  9. Initialize the LVM disk devices

  10. +
  11. Create a volume group from initialized disks

  12. +
  13. Create Logical volume from created Volume group

  14. +
  15. Create a filesystem on the new LV device

  16. +
  17. Mount the LV filesystem

  18. +
+

This example features a LVM setup on NetBSD/i386 -current.

+
+

+16.1. Anatomy of NetBSD Logical Volume Manager

+

+
+

Figure 16.1. Anatomy of Logical Volume Management

+
Anatomy of Logical Volume Management
+
+
    +
  1. +

    Volume Group

    +

    The Volume Group is the highest level abstraction used within the LVM. It gathers + together a collection of Logical Volumes and Physical Volumes into one administrative + unit.

    +
  2. +
  3. +

    Physical Volume

    +

    A physical volume is typically a hard disk, though it may well just be a device that + 'looks' like a hard disk (eg. a software raid device).

    +
  4. +
  5. +

    Logical Volume

    +

    The equivalent of a disk partition in a non-LVM system. The LV is visible as a + standard block device; as such the LV can contain a file system (eg. /home).

    +
  6. +
  7. +

    Physical Extends

    +

    Each physical volume is divided chunks of data, known as physical extents, these + extents have the same size as the logical extents for the volume group.

    +
  8. +
  9. +

    Logical Extends

    +

    Each logical volume is split into chunks of data, known as logical extents. The extent + size is the same for all logical volumes in the volume group.

    +
  10. +
  11. +

    Physical Extends mapping

    +

    There are couple of general strategies used for mapping “LE's” to + “PE's”.

    +
      +
    • +

      + Linear Mapping +

      +

      This mapping lineary will assing range of PE's to LE's.

      +
      For example it can map 100 PE's from PV 1 to LV 1 and 
      +                   another 100 PE's from PV 0.
      +
    • +
    • +

      + Stripe Mapping +

      +

      will interleave the chunks of the logical extents across a number of physical + volumes.

      +
      +

      Warning

      +

      Be aware that Stripe mapping is not implemented yet in NetBSD device-mapper + driver.

      +
      +
    • +
    +

    +

    +
  12. +
  13. +

    Snapshots

    +

    A wonderful facility provided by LVM is 'snapshots'. This allows the administrator to + create a new block device which presents an exact copy of a logical volume, frozen at some + point in time. Typically this would be used when some batch processing, a backup for + instance, needs to be performed on the logical volume, but you don't want to halt a live + system that is changing the data. When the snapshot device has been finished with the + system administrator can just remove the device. This facility does require that the + snapshot be made at a time when the data on the logical volume is in a consistent state.

    +
    +

    Warning

    +

    Snapshot feature is not fully implemented in NetBSD and should not be used in + production.

    +
    +
  14. +
+
+
+

+16.2. Install physical media

+

This step is at your own discretion, depending on your platform and the hardware at your + disposal. LVM can be used with disklabel partitions or even with standard + partitions created with fdisk.

+

From my 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
+
+
+

+16.3. Configure Kernel Support

+

The following kernel configuration directive is needed to provide LVM device support. It + is not enabled in the GENERIC kernel:

+
+

Note

+

This driver is only available in haad-dm branch. Therefore you have + to update your src/sys directory to haad-dm branch.

+
+
pseudo-device  dm   # device-mapper device
+
+
+

+16.4. Configure NetBSD system

+

For using LVM you have to install lvm2tools and libdevmapper to NetBSD system. These tools + are not enabled as default.

+

To enable building of LVM tools set MKLVM=yes in mk.conf file.

+
+

Note

+

These tools are only available in haad-dm branch. Therefore you + have to update your src/external/gpl2 directory to haad-dm branch.

+
+

After installation of lvm2tools and libdevmapper /etc/lvm directory + should be created. For debuging purposes it is good to copy + lvm2tools/dist/doc/example.conf there as lvm.conf.

+
+
+

+16.5. Disklabel each physical volume member of the LVM

+

Each physical volume disk in LVM will need a special file system established. In this + example, I will need to disklabel:

+


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

+
+

Note

+

Always remember to disklabel the character device, not the block device, in + /dev/r{s,w}d*

+
+
+

Note

+

On all platforms except i386 where d partition is used for this, + the c slice is symbolic of the entire NetBSD partition and is + reserved.

+
+

You will probably want to remove any pre-existing disklabels on the physical voleme disks + in the LVM. This can be accomplished in one of two ways with the dd(1) command:

+
# 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
+

If your port uses a MBR (Master Boot Record) to partition the disks so that the NetBSD + partitions are only part of the overall disk, and other OSs like Windows or Linux use other + parts, you can void the MBR and all partitions on disk by using the command:

+
# 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 
+

This will make all data on the entire disk inaccessible. Note that the entire disk is + slice d on i386 (and some other ports), and c + elsewhere (e.g. on sparc). See the “kern.rawpartition” sysctl - "3" means "d", + "2" means "c".

+

The default disklabel for the disk will look similar to this:

+
# 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*)
+

You will need to create one “slice” on the NetBSD partition of the disk + that consumes the entire partition. The slice must begin at least two sectors after end of + disklabel part of disk. On i386 it is sector “63”. Therefore, the + “size” value should be “total sectors” minus 2x + “sectors”. Edit your disklabel accordingly:

+
# disklabel -e sd0
+
+

Note

+

The offset of a slice of type “4.2BSD” must be a multiple of the + “sectors” value.

+
+
+

Note

+

Be sure to export EDITOR=[path to your favorite editor] before + editing the disklabels.

+
+
+

Note

+

The slice must be fstype 4.2BSD.

+
+

Because there will only be one slice on this partition, you can recycle the + d slice (normally reserved for symbolic uses). Change your disklabel to the + following:

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

Optionally you can setup a slice other than d to use, simply adjust + accordingly below:

+
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*)
+

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.

+
+
+

+16.6. Create Physical Volumes

+

Once all disks are properly labeled, you will need to create physical volume on them. + Every partition/disk added to LVM must have physical volume header on start + of it. All informations, like Volume group where Physical volume belongs are stored in this + header.

+
+                # lvm pvcreate /dev/rwd1[ad]
+            
+

Status of physical volume can be viewed with pvdisplay command.

+
+          # lvm pvdisplay
+      
+
+
+

+16.7. Create Volume Group

+

Once all disks are properly labeled with physical volume header, volume group must be + created from them. Volume Group is pool of PE's from which administrator can create Logical + Volumes “partitions”.

+
+            # lvm vgcreate vg0 /dev/rwd1[ad]
+    
+
    +
  • vg0 is name of Volume Group

  • +
  • /dev/rwd1[ad] is Physical Volume

  • +
+

Volume group can be later extended/reduced with vgextend and vgreduce commands. These + commands adds physical volumes to VG.

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

Status of Volume group can be viewed with vgdisplay command.

+
+          # lvm vgdisplay vg0
+      
+
+
+

+16.8. Create Logical Volume

+

Once Volume Group was created administrator can create “logical partitions” + volumes.

+
+            # lvm lvcreate  -L 20M -n lv1 vg0
+        
+
    +
  • vg0 is name of Volume Group

  • +
  • -L 20M is size of Logical Volume

  • +
  • -n lv1 is name of Logical Volume

  • +
+

Logical Volume can be later extended/reduced with lvextend and lvreduce commands.

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

Note

+

To shrink lv partition you have to shrink filesystem before and NetBSD ffs2 doesn't + support it now.

+
+

Status of Logical Volume can be viewed with lvdisplay command.

+
+          # lvm vgdisplay vg0/lv1
+      
+
+
+ + + Index: chap-lvm.xml =================================================================== RCS file: chap-lvm.xml diff -N chap-lvm.xml --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ chap-lvm.xml 21 Aug 2008 19:51:35 -0000 @@ -0,0 +1,457 @@ + + + + + + + &os; Logical Volume Manager configuration + + &os; LVM is build on Linux lvm2tools and libdevmapper with device-mapper kernel driver + written for &os;. + + The LVM driver allows the user to manage available disk space. Disk space + from several disks, partitions can be added to Volume Groups, which is pool + available disk space for Logical Partitions + aka Logical Volumes. + + The steps required to setup a LVM are as follows: + + + + Install physical media + + + + Configure kernel support + + + + Configure system, install tools + + + + + Optional step + + Disklabel each volume member of the LVM + + + + Initialize the LVM disk devices + + + + Create a volume group from initialized disks + + + + Create Logical volume from created Volume group + + + + Create a filesystem on the new LV device + + + + Mount the LV filesystem + + + + This example features a LVM setup on &os;/i386 -current. + + + + + Anatomy of &os; Logical Volume Manager + +
+ Anatomy of Logical Volume Management + + + + + +
+ + + Volume Group + The Volume Group is the highest level abstraction used within the LVM. It gathers + together a collection of Logical Volumes and Physical Volumes into one administrative + unit. + + + Physical Volume + A physical volume is typically a hard disk, though it may well just be a device that + 'looks' like a hard disk (eg. a software raid device). + + + Logical Volume + The equivalent of a disk partition in a non-LVM system. The LV is visible as a + standard block device; as such the LV can contain a file system (eg. /home). + + + Physical Extends + Each physical volume is divided chunks of data, known as physical extents, these + extents have the same size as the logical extents for the volume group. + + + Logical Extends + Each logical volume is split into chunks of data, known as logical extents. The extent + size is the same for all logical volumes in the volume group. + + + Physical Extends mapping + There are couple of general strategies used for mapping LE's to + PE's. + + + Linear Mapping + + This mapping lineary will assing range of PE's to LE's. + For example it can map 100 PE's from PV 1 to LV 1 and + another 100 PE's from PV 0. + + + + Stripe Mapping + + will interleave the chunks of the logical extents across a number of physical + volumes. + + Be aware that Stripe mapping is not implemented yet in NetBSD device-mapper + driver. + + + + + + + Snapshots + A wonderful facility provided by LVM is 'snapshots'. This allows the administrator to + create a new block device which presents an exact copy of a logical volume, frozen at some + point in time. Typically this would be used when some batch processing, a backup for + instance, needs to be performed on the logical volume, but you don't want to halt a live + system that is changing the data. When the snapshot device has been finished with the + system administrator can just remove the device. This facility does require that the + snapshot be made at a time when the data on the logical volume is in a consistent state. + + + Snapshot feature is not fully implemented in &os; and should not be used in + production. + + + + +
+ + + + + Install physical media + + This step is at your own discretion, depending on your platform and the hardware at your + disposal. LVM can be used with disklabel partitions or even with standard + partitions created with fdisk. + + From my 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 + + + + + + Configure Kernel Support + + The following kernel configuration directive is needed to provide LVM device support. It + is not enabled in the GENERIC kernel: + + + This driver is only available in haad-dm branch. Therefore you have + to update your src/sys directory to haad-dm branch. + + + pseudo-device dm # device-mapper device + + + + + + Configure NetBSD system + For using LVM you have to install lvm2tools and libdevmapper to NetBSD system. These tools + are not enabled as default. + + To enable building of LVM tools set MKLVM=yes in mk.conf file. + + + These tools are only available in haad-dm branch. Therefore you + have to update your src/external/gpl2 directory to haad-dm branch. + + + After installation of lvm2tools and libdevmapper /etc/lvm directory + should be created. For debuging purposes it is good to copy + lvm2tools/dist/doc/example.conf there as lvm.conf. + + + + + + + + Disklabel each physical volume member of the LVM + + Each physical volume disk in LVM will need a special file system established. In this + example, I will need to disklabel: + + + /dev/rsd0d + /dev/rsd1d + /dev/rsd2d + /dev/rsd3d + + + + Always remember to disklabel the character device, not the block device, in + /dev/r{s,w}d* + + + + On all platforms except i386 where d partition is used for this, + the c slice is symbolic of the entire &os; partition and is + reserved. + + + You will probably want to remove any pre-existing disklabels on the physical voleme disks + in the LVM. This can be accomplished in one of two ways with the &man.dd.1; command: + + &rprompt; dd if=/dev/zero of=/dev/rsd0d bs=8k count=1 + &rprompt; dd if=/dev/zero of=/dev/rsd1d bs=8k count=1 + &rprompt; dd if=/dev/zero of=/dev/rsd2d bs=8k count=1 + &rprompt; dd if=/dev/zero of=/dev/rsd3d bs=8k count=1 + + If your port uses a MBR (Master Boot Record) to partition the disks so that the &os; + partitions are only part of the overall disk, and other OSs like Windows or Linux use other + parts, you can void the MBR and all partitions on disk by using the command: + + &rprompt; dd if=/dev/zero of=/dev/rsd0d bs=8k count=1 + &rprompt; dd if=/dev/zero of=/dev/rsd1d bs=8k count=1 + &rprompt; dd if=/dev/zero of=/dev/rsd2d bs=8k count=1 + &rprompt; dd if=/dev/zero of=/dev/rsd3d bs=8k count=1 + + This will make all data on the entire disk inaccessible. Note that the entire disk is + slice d on i386 (and some other ports), and c + elsewhere (e.g. on sparc). See the kern.rawpartition sysctl - "3" means "d", + "2" means "c". + + The default disklabel for the disk will look similar to this: + + &rprompt; 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*) + + You will need to create one slice on the &os; partition of the disk + that consumes the entire partition. The slice must begin at least two sectors after end of + disklabel part of disk. On i386 it is sector 63. Therefore, the + size value should be total sectors minus 2x + sectors. Edit your disklabel accordingly: + + &rprompt; disklabel -e sd0 + + + The offset of a slice of type 4.2BSD must be a multiple of the + sectors value. + + + + Be sure to export EDITOR=[path to your favorite editor] before + editing the disklabels. + + + + The slice must be fstype 4.2BSD. + + + Because there will only be one slice on this partition, you can recycle the + d slice (normally reserved for symbolic uses). Change your disklabel to the + following: + + 3 partitions: + # size offset fstype [fsize bsize cpg] + d: 4197403 65 4.2BSD # (Cyl. 1 - 4020*) + + Optionally you can setup a slice other than d to use, simply adjust + accordingly below: + + 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*) + + 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. + + + + + + Create Physical Volumes + + Once all disks are properly labeled, you will need to create physical volume on them. + Every partition/disk added to LVM must have physical volume header on start + of it. All informations, like Volume group where Physical volume belongs are stored in this + header. + + + &rprompt; lvm pvcreate /dev/rwd1[ad] + + + Status of physical volume can be viewed with pvdisplay command. + + + &rprompt; lvm pvdisplay + + + + + + + + Create Volume Group + + Once all disks are properly labeled with physical volume header, volume group must be + created from them. Volume Group is pool of PE's from which administrator can create Logical + Volumes partitions. + + + &rprompt; lvm vgcreate vg0 /dev/rwd1[ad] + + + + vg0 is name of Volume Group + + + /dev/rwd1[ad] is Physical Volume + + + + Volume group can be later extended/reduced with vgextend and vgreduce commands. These + commands adds physical volumes to VG. + + + &rprompt; lvm vgextend vg0 /dev/rwd1[ad] + + &rprompt; lvm vgreduce vg0 /dev/rwd1[ad] + + + Status of Volume group can be viewed with vgdisplay command. + + + &rprompt; lvm vgdisplay vg0 + + + + + + + + Create Logical Volume + + Once Volume Group was created administrator can create logical partitions + volumes. + + + &rprompt; lvm lvcreate -L 20M -n lv1 vg0 + + + + vg0 is name of Volume Group + + + -L 20M is size of Logical Volume + + + -n lv1 is name of Logical Volume + + + + Logical Volume can be later extended/reduced with lvextend and lvreduce commands. + + + &rprompt; lvm lvextend -L+20M /dev/vg0/lv1 + + &rprompt; lvm lvreduce -L-20M /dev/vg0/lv1 + + + + To shrink lv partition you have to shrink filesystem before and &os; ffs2 doesn't + support it now. + + + Status of Logical Volume can be viewed with lvdisplay command. + + + &rprompt; lvm vgdisplay vg0/lv1 + + + After reboot all functional LV's in defined Volume group can be activated with command + + + &rprompt; lvm vgchange -a y + + + +
Index: netbsd.xml =================================================================== RCS file: /cvsroot/htdocs/docs/guide/en/netbsd.xml,v retrieving revision 1.5 diff -u -r1.5 netbsd.xml --- netbsd.xml 19 Feb 2008 18:52:52 -0000 1.5 +++ netbsd.xml 21 Aug 2008 19:51:35 -0000 @@ -85,6 +85,7 @@ &chap-rmmedia; &chap-cgd; &chap-ccd; + &chap-lvm; &chap-rf; &chap-pam; &chap-tuning; Index: chapters.ent =================================================================== RCS file: /cvsroot/htdocs/docs/guide/en/chapters.ent,v retrieving revision 1.4 diff -u -r1.4 chapters.ent --- chapters.ent 19 Feb 2008 18:52:52 -0000 1.4 +++ chapters.ent 21 Aug 2008 19:51:35 -0000 @@ -22,6 +22,7 @@ +