OpenVZ:安装主机设备/分区/目录在带有绑定的容器(Debian / Ubuntu)
有时您处于需要从OpenVZ容器中的OpenVZ主机上安装硬盘驱动器,部件或目录的情况,例如,您可以向主机添加快速固态硬盘,并希望将容器的MySQL数据库放在其上MySQL更快。 本教程介绍如何在具有绑定安装的OpenVZ容器中装载主机设备/分区/目录。
我不会保证这将为您工作!
1初步说明
在本教程中,我有一个OpenVZ容器,容器ID为101
,运行MySQL。 我向主机添加了第二个硬盘驱动器,并希望将容器的MySQL目录/ var / lib / mysql
放在第二个硬盘上。
2准备主机
主办:
如果您已经在主机上添加了新的硬盘驱动器,那么您应该在...的输出中看到它
fdisk -l
...并且您应该看到它是未格式化的(除非您以前已经创建了分区) - 在此示例中,硬盘驱动器是/ dev / sdb
:
root@server1:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00029d5c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Extended
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
Disk /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table
root@server1:~#
我们来创建一个单独的分区:
fdisk /dev/sdb
root @ server1:〜#fdisk / dev / sdb
设备既不包含有效的DOS分区表,也不包含Sun,SGI或OSF disklabel
构建一个新的DOS磁盘标签,磁盘标识符为0x31e0dc4b。
更改将仅保留在内存中,直到您决定编写它们。
之后,当然,以前的内容将无法恢复。
警告:分区表4的无效标志0x0000将被w(rite)修正
警告:DOS兼容模式已弃用。
强烈建议
关闭模式(命令'c')并将显示单位更改为
扇区(命令'u')。
命令(m帮助):
< - n
命令行动
e扩展
p主分区(1-4)
< - p
分区号(1-4):
< - 1
第一个圆柱体(1-3916,默认为1):
< - ENTER
使用默认值1
最后一个圆柱体,+圆柱体或+大小{K,M,G}(1-3916,默认值3916):
< - ENTER
使用默认值3916
命令(m为帮助):
< - t
所选分区1
十六进制代码(L型列表代码):
< - L
0空24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39计划9 82 Linux交换/ So c1 DRDOS / sec(FAT-
2 XENIX根3c PartitionMagic 83 Linux c4 DRDOS / sec(FAT-
3 XENIX usr 40 Venix 80286 84 OS / 2隐藏C:c6 DRDOS /秒(FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux扩展c7 Syrinx
5扩展42 SFS 86 NTFS卷集da非FS数据
6 FAT16 4d QNX4.x 87 NTFS卷集db CP / M / CTOS /。
7 HPFS / NTFS 4e QNX4.x第二部分88 Linux纯文本戴尔实用程序
8 AIX 4f QNX4.x第3部分8e Linux LVM df BootIt
9 AIX可启动50 OnTrack DM 93变形虫e1 DOS访问
OS / 2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R / O
b W95 FAT32 52 CP / M 9f BSD / OS e4 SpeedStor
c W95 FAT32(LBA)53 OnTrack DM6 Aux a0 IBM Thinkpad Hi eb BeOS fs
e W95 FAT16(LBA)54 OnTrackDM6 a5 FreeBSD ee GPT
f W95 Ext'd(LBA)55 EZ-Drive a6 OpenBSD ef EFI(FAT-12/16 /
10 OPUS 56金弓a7 NeXTSTEP f0 Linux / PA-RISC b
11隐藏FAT12 5c Priam Edisk a8达尔文UFS f1 SpeedStor
12 Compaq diagnostics 61 SpeedStor a9 NetBSD f4 SpeedStor
14隐藏FAT16 <3 63 GNU HURD或Sys ab达尔文启动f2 DOS辅助
16 Hidden FAT16 64 Novell Netware af HFS / HFS + fb VMware VMFS
17隐藏HPFS / NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI交换fd Linux raid auto
1b隐藏W95 FAT3 75 PC / IX bb启动向导hid fe LANstep
1c隐藏W95 FAT3 80老Minix是Solaris启动ff BBT
1e隐藏W95 FAT1
十六进制代码(类型L列出代码):
< - 83
命令(m为帮助):
< - w
分区表已被更改!
调用ioctl()重新读取分区表。
同步磁盘
root @ server1:〜#
之后,应该有分区/ dev / sdb1
:
fdisk -l
root@server1:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00029d5c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Extended
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
Disk /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x31e0dc4b
Device Boot Start End Blocks Id System
/dev/sdb1 1 3916 31455238+ 83 Linux
root@server1:~#
我们用ext4格式化...
mkfs.ext4 /dev/sdb1
...并挂载到/ mnt / sdb1
:
mkdir /mnt/sdb1
mount /dev/sdb1 /mnt/sdb1
您应该在...的输出中看到/ dev / sdb1
mount
...现在:
root@server1:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sdb1 on /mnt/sdb1 type ext4 (rw)
root@server1:~#
要在启动时自动挂载/ dev / sdb1
,请将其添加到/ etc / fstab中
:
vi /etc/fstab
[...] /dev/sdb1 /mnt/sdb1 ext4 errors=remount-ro 0 1 |
3准备容器
容器:
当我们想把/ var / lib / mysql
移动到新分区时,我们需要首先停止MySQL,确保在容器启动时没有自动启动,创建/ var / lib / mysql
的备份和一个新的,空/ var / lib / mysql
目录:
/etc/init.d/mysql stop
update-rc.d -f mysql remove
mv /var/lib/mysql/ /var/lib/mysql_bak
mkdir /var/lib/mysql
chown mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysql
4为主机上的容器创建绑定脚本
主办:
在主机上,我们现在创建绑定安装脚本/etc/vz/conf/101.mount
(确保用正确的容器ID替换101
),如下所示:
vi /etc/vz/conf/101.mount
#!/bin/bash . /etc/vz/vz.conf . ${VE_CONFFILE} SRC=/mnt/sdb1 DST=/var/lib/mysql if [ ! -e ${VE_ROOT}${DST} ]; then mkdir -p ${VE_ROOT}${DST}; fi mount -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC} |
您必须根据需要调整SRC
和DST
变量。 SRC
是我们要在容器中安装的目录(在本例中
为/ mnt / sdb1
), DST
是容器中的安装点。
如果要添加安装选项(如noatime)
,可以将-o
开关添加到安装
线,例如:
#!/bin/bash . /etc/vz/vz.conf . ${VE_CONFFILE} SRC=/mnt/sdb1 DST=/var/lib/mysql if [ ! -e ${VE_ROOT}${DST} ]; then mkdir -p ${VE_ROOT}${DST}; fi mount -o noatime -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC} |
使脚本可执行...
chmod +x /etc/vz/conf/101.mount
...并重新启动容器(这就是为什么我们在第三章中禁用了MySQL的容器的系统启动链接 - / var / lib / mysql
现在是空的,这将导致MySQL错误):
vzctl restart 101
5使用容器中的绑定安装
容器:
容器重新启动完成后,您可以登录到容器并检查新安装是否存在:
mount
root@test:~# mount
/dev/simfs on / type simfs (rw,relatime)
/dev/simfs on /var/lib/mysql type simfs (rw,relatime)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,relatime,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,relatime)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)
root@test:~#
df -h
root@test:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/simfs 1.0G 381M 644M 38% /
/dev/simfs 30G 172M 28G 1% /var/lib/mysql
tmpfs 128M 0 128M 0% /lib/init/rw
tmpfs 128M 0 128M 0% /dev/shm
root@test:~#
转到/ var / lib
目录:
cd /var/lib
ls -la
root@test:/var/lib# ls -la
total 72
drwxr-xr-x 18 root root 4096 Jul 17 10:25 .
drwxr-xr-x 13 root root 4096 Feb 13 2011 ..
drwxr-xr-x 5 root root 4096 Jul 17 10:16 apt
drwxr-xr-x 2 root root 4096 Oct 16 2010 aptitude
drwxr-xr-x 2 root root 4096 Feb 13 2011 dhcp
drwxr-xr-x 7 root root 4096 Jul 17 10:16 dpkg
drwxr-xr-x 2 root root 4096 Jan 1 2011 initscripts
drwxr-xr-x 2 root root 4096 Jan 1 2011 insserv
drwxrwsr-x 2 libuuid libuuid 4096 Feb 13 2011 libuuid
drwxr-xr-x 2 root root 4096 Apr 17 2010 logrotate
drwxr-xr-x 2 root root 4096 Dec 14 2010 misc
drwxr-xr-x 4 root root 4096 Jul 17 10:53 mysql
drwx------ 3 mysql mysql 4096 Jul 17 10:24 mysql_bak
drwxr-xr-x 2 root root 4096 Feb 13 2011 pam
drwxr-xr-x 2 root root 4096 Jul 17 10:23 quota
drwxr-xr-x 2 root root 4096 Jul 17 10:52 update-rc.d
drwxr-xr-x 2 root root 4096 Jul 17 10:53 urandom
drwxr-xr-x 3 root root 4096 Feb 13 2011 vim
root@test:/var/lib#
如您所见,新的/ var / lib / mysql
目录具有错误的权限/所有权 - 让我们更正(即使重新启动容器后,新权限/所有权也应该保留):
chown mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysql
现在我们将数据库从备份移回到/ var / lib / mysql
:
cp -pfr /var/lib/mysql_bak/* /var/lib/mysql
然后启动MySQL:
/etc/init.d/mysql start
而已! 最后一件事应该是重新创建MySQL的系统启动链接,以便在容器启动时自动启动:
update-rc.d mysql defaults
6链接
- OpenVZ: http : //openvz.org/