在xen hyperviso中创建domU的时候,经常要跟镜像文件或lvm打交道,尤其是文件系统,目前linux中用得最多的是:ext2、ext3、ext4,这三种文件系统各有优缺点。

  1. ext2具有良好的兼容性,可以在NetBSD和Linux中直接挂载操作;

  2. ext3在Linux中拥有广泛的用户群,是目前最成熟的文件系统,不过NetBSD尚未支持ext3;

  3. ext4是最近才被Redhat引入生产环境,性能高于ext3,是以后的主流,不过目前跟grub2还有些兼容问题,NetBSD对其支持更是遥遥无期。

本文旨在说明如何识别各种domU storage backend的文件系统类型,OS涵盖NetBSD、Linux,backend类型涵盖镜像文件和LVM。

一、镜像文件

1.1 NetBSD

# vnconfig vnd0 /path/to/your/image.img
# NOTE:  /dev/vnd0
# /dev/vnd2d:
type: vnd
disk: vnd
label: fictitious
flags:
bytes/sector: 512
sectors/track: 32
tracks/cylinder: 64
sectors/cylinder: 2048
cylinders: 1953
total sectors: 4000062
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0
9 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 d:   4000062         0     unused      0     0        # (Cyl.      0 -   1953*)
 e:   3000032        32 Linux Ext2      0     0        # (Cyl.      0*-   1464*)
 i:    999904   3000096       swap                     # (Cyl.   1464*-   1953*)
disklabel: boot block size 0
disklabel: super block size 0
  • disklabel显示的结果表明该镜像文件含两个分区:第一个是linux ext分区,但不确定是ext2还是ext3, 因为disklabel无法区分这两者,第二个是linux swap分区。

  • 实际上,该镜像中的linux ext分区为primary分区,linux swap是扩展分区中的一个逻辑分区。 disklabel也无法显示该信息。

NetBSD-5# dumpe2fs /dev/vnd2e | head -15
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          f53a00d0-ad60-4dc0-bc7a-a3dab4c562fd
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal filetype sparse_super (1)
Filesystem flags:         signed_directory_hash
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              750720
Block count:              1500016
Reserved block count:     75000
Free blocks:              1018679
1 在filesystem feature中,has_journal表明这是一个ext3分区。

假如要查看ext4分区,需要用dumpe4fs,feature是extends不过netbsd5.1和centos5.7尚无该命令。

1.2 Linux

$ sudo dd if=/dev/zero of=./deb6-ext3.img bs=1000 count=2000K seek=32
$ sudo parted deb6-ext3.img mklabel msdos
$ sudo parted deb6-ext3.img mkpartfs primary ext2 0 1536
$ sudo parted deb6-ext3.img mkpart extend 1537 2048
$ sudo parted deb6-ext3.img mkpartfs logical linux-swap 1537 2048
$ sudo kpartx -p "" -av deb6-ext3.img
add map loop61 : 0 3000032 linear /dev/loop6 32
add map loop65 : 0 999904 linear /dev/loop6 3000096
# dumpe2fs /dev/mapper/loop61 | head -15
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          b31e2b83-d759-48f2-b1ca-36abd6d26278
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      filetype sparse_super
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              750720
Block count:              1500016
Reserved block count:     75000
Free blocks:              1405717
Free inodes:              750709
$ sudo tune2fs -j /dev/mapper/loop61

将ext2转换成ext3,因为CentOS5.7中自带的parted版本较低,不支持ext3,如果是其它linux发行版,可以直接通过parted创建ext3分区。无需tune2fs -j这个步骤。

$ sudo dumpe2fs /dev/mapper/loop61 | head -15
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          b31e2b83-d759-48f2-b1ca-36abd6d26278
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal  filetype sparse_super
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              750720
Block count:              1500016
Reserved block count:     75000
Free blocks:              1405717
Free inodes:              750709

三、lvm或物理分区

同样可以通过dumpe2fs /dev/dev_name | head -15来查看