OpenVZ:安装主机设备/分区/目录在一个容器与绑定mounts(Debian / Ubuntu)

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}

您必须根据需要调整SRCDST变量。 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链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏