分类: LINUX
2008-05-04 14:34:48
kpartx -a /dev/loop0mount -t ntfs-3g /dev/mapper/loop0p1 /mnt
lomount -t ntfs-3g -diskimage test.img -partition 1 /mnt
用 dd 创建一个自动增长的块文件:
比如要创建一个从 0 字节开始最大可以增长到 5GB 的虚拟机文件。
dd if=/dev/zero of=newfile.img bs=1M count=0 seek=5k
这样我们创建文件以后,用 ls -l 看文件是 5G 我们使用 du -sh 来统计这个文件的大小是0,这个文件会随着我们的使用自动增大,到5G截止。
增加块设备
xm block-attach test01 file:/var/lib/xen/images/test01/aaa xvdb w
删除块设备
1、查看节点名称 (在 vm 上)
cat /sys/block/xvda/device/nodename
2、删除设备
xm block-detach test01 deviceid -f
virt-install example
virt-install -n test01 -r 1024 -b xenbr0 -f /var/lib/xen/images/test01/v_test.img -l ftp://172.16.0.240/setup/centos5.3x86_64 -x ks=
调整虚机硬盘大小:
1、我们可以在实体机器上启动 lvm 把虚机直接装在 逻辑卷 里面,这样块设备就可以改变了。
vgdisplay
lvresize -l +512 /dev/device/name
lvresize -l -512 /dev/device/name
然后关闭虚机。把设备挂在另一个虚机上。
(实体机测试完卷不能删除,需要重启机器,原因未知)
改变分区大小:
1 fdisk 改小后 用 resize2fs 修改。
这个比较容易用 resize2fs 修改就好了。但要注意 fdisk 分区的时候要略大于 resize2fs 设置的容量。
resize2fs 大小 * 4k * 1.05 = k
2 使用 parted 修改。这个经常会提示
(File system has an incompatible feature enabled.)
这个是因为文件系统有 has_journal ext_attr resize_inode
先去掉,然后重建就可以了。
debugfs -w /dev/xvdb1 -R "features ^has_journal ^ext_attr ^resize_inode"
然后就可以 parted /dev/xvdb print free
parted /dev/xvdb resize 1 32.3kB 2048MB
这中间要 e2fsck n 次
处理好分区以后也要还原属性
debugfs -w /dev/xvdb1 -R "features has_journal ext_attr resize_inode"
之后也要 e2fsck n 次。
(has_journal ext_attr resize_inode dir_index filetype sparse_super)
ext3 特性一般就这几种,不使用 selinux 的可以不考虑 ext_attr
修改分区时候计算用到的一些知识。
对于大小为4k的文件系统块来说,块组大小为 128M。
计算 4096(块大小4k)*8(bit)*4k(每位表示一个块)/1024= 128M
每个块组包含一个块位图块,一个 inode 位图块,一个或多个块用于描述 inode 表和用于存储文件数据的数据块
块位图用于描述该块组所管理的块的分配状态。如果某个块对应的位未置位,那么代表该块未分配,可以用于存储数据;否则,代表该块已经用于存储数据或者该块不能够使用(譬如该块物理上不存在)。由于块位图仅占一个块,因此这也就决定了块组的大小。
Inode位图用于描述该块组所管理的inode的分配状态。我们知道inode是用于描述文件的元数据,每个inode对应文件系统中唯一的一个号,如果inode位图中相应位置位,那么代表该inode已经分配出去;否则可以使用。由于其仅占用一个块,因此这也限制了一个块组中所能够使用的最大 inode数量。
Inode表用于存储inode信息。它占用一个或多个块(为了有效的利用空间,多个inode存储在一个块中),其大小取决于文件系统创建时的参数,由于inode位图的限制,决定了其最大所占用的空间。
超级块采用了一种稀疏的方式来存储这些拷贝,只有块组号是3, 5 ,7的幂的块组(譬如说1,3,5,7,9,25,49…)才备份这个拷贝.
例如:查看一个硬盘
[root@localhost ~]# tune2fs -l /dev/xvda1
tune2fs 1.39 (29-May-2006)
Filesystem volume name: /
Last mounted on:
Filesystem UUID: 1fca970f-bdc0-4ea6-a889-3f3fa83a7f9f
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 524288
Block count: 524112
Reserved block count: 26205
Free blocks: 132630
Free inodes: 459114
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 127
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 32768
Inode blocks per group: 1024
Filesystem created: Sat Aug 8 11:05:41 2009
Last mount time: Mon Aug 10 17:19:06 2009
Last write time: Mon Aug 10 17:19:06 2009
Mount count: 1
Maximum mount count: -1
Last checked: Mon Aug 10 17:18:52 2009
Check interval: 0 (
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Journal inode: 8
Default directory hash: tea
Directory Hash Seed: a19e6f74-f897-4f81-92bf-36eba9ecee18
Journal backup: inode blocks
从上面可以看出块大小是4k Block size: 4096
因块组有位图限制,仅占用一个块,所以组最大 4096*8(bit) = 32768
块一共 Block count: 524112
inode 占用 Inode blocks per group: 1024
计算有多少个组 524112/32768 = 15
计算磁盘容量为 (524112-4(保留)-5-2(备份SB)-15×1024 )*4k/1024=1987M
在用 df 验证 一样,OK 证明我们计算正确。
一个配置文件样例:name = "winxp"
]
maxmem = 2048
memory = 2048
cpus='0-3'
vcpus = 2
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "c"
pae = 0
acpi = 1
apic = 0
localtime = 1
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
device_model = "/usr/lib64/xen/bin/qemu-dm"
usbdevice = "tablet"
sdl = 0
vnc = 1
vncunused = 1
keymap = "en-us"
disk = [ "phy:/dev/xen_images/winxp,sda,w", "file:/export/home/install.iso,hda:cdrom,r'
vif = [ "bridge=,type=ioemu" ]
serial = "pty"