OpenVZ · 5 min read · Oct 11, 2025
OpenVZ: ホストデバイス/パーティション/ディレクトリをバインドマウントでコンテナにマウントする方法 (Debian/Ubuntu)
OpenVZ: ホストデバイス/パーティション/ディレクトリをバインドマウントでコンテナにマウントする方法 (Debian/Ubuntu)
バージョン 1.0
著者: Falko Timme
Twitterでフォローしてください
時々、OpenVZホストからOpenVZコンテナ内にハードドライブ、パーティション、またはディレクトリをマウントする必要がある状況に直面します。たとえば、ホストに高速SSDを追加し、MySQLデータベースをその上に置いてMySQLを高速化したい場合です。このチュートリアルでは、バインドマウントを使用してOpenVZコンテナ内にホストデバイス/パーティション/ディレクトリをマウントする方法を説明します。
これがあなたにとって機能するという保証はありません!
1 前提条件
このチュートリアルでは、コンテナID 101のOpenVZコンテナがMySQLを実行しています。ホストに2つ目のハードドライブを追加し、コンテナのMySQLディレクトリ/var/lib/mysqlを2つ目のハードドライブに置きたいと思います。
2 ホストの準備
ホスト:
新しいハードドライブをホストに追加した場合、次のコマンドの出力に表示されるはずです…
fdisk -l…そして、フォーマットされていないことがわかるはずです(以前にパーティションを作成していない限り) - この例ではハードドライブは/dev/sdbです:
root@server1:~# fdisk -l
ディスク /dev/sda: 32.2 GB, 32212254720 バイト
255 ヘッド, 63 セクター/トラック, 3916 シリンダ
単位 = シリンダの 16065 * 512 = 8225280 バイト
セクターサイズ (論理/物理): 512 バイト / 512 バイト
I/O サイズ (最小/最適): 512 バイト / 512 バイト
ディスク識別子: 0x00029d5c
デバイス ブート 開始 終了 ブロック Id システム
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Extended
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
ディスク /dev/sdb: 32.2 GB, 32212254720 バイト
255 ヘッド, 63 セクター/トラック, 3916 シリンダ
単位 = シリンダの 16065 * 512 = 8225280 バイト
セクターサイズ (論理/物理): 512 バイト / 512 バイト
I/O サイズ (最小/最適): 512 バイト / 512 バイト
ディスク識別子: 0x00000000
ディスク /dev/sdb には有効なパーティションテーブルが含まれていません
root@server1:~#それに1つのパーティションを作成しましょう:
fdisk /dev/sdbroot@server1:~# fdisk /dev/sdb
デバイスには有効なDOSパーティションテーブルも、Sun、SGI、またはOSFディスクラベルも含まれていません
ディスク識別子0x31e0dc4bで新しいDOSディスクラベルを構築しています。
変更は、書き込むことを決定するまでメモリ内にのみ残ります。
その後、もちろん、以前の内容は回復できなくなります。
警告: パーティションテーブル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
16進数コード (コードをリストするにはLを入力): <– L
0 空 24 NEC DOS 81 Minix / 古いLin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 隠しC: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP ブート 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 2nd part 88 Linux プレーンテキスト de Dell ユーティリティ
8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX ブート可能 50 OnTrack DM 93 Amoeba e1 DOS アクセス
a OS/2 ブート マネージャ 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 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 隠しFAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 Compaq 診断 61 SpeedStor a9 NetBSD f4 SpeedStor
14 隠しFAT16 <3 63 GNU HURD またはSys ab Darwin ブート f2 DOS セカンダリ
16 隠し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 Boot Wizard hid fe LANstep
1c 隠しW95 FAT3 80 古いMinix be Solaris ブート ff BBT
1e 隠しW95 FAT1
16進数コード (コードをリストするにはLを入力): <– 83
コマンド (ヘルプはm): <– w
パーティションテーブルが変更されました!
ioctl()を呼び出してパーティションテーブルを再読み込みします。
ディスクを同期しています。
root@server1:~#
その後、/dev/sdb1というパーティションが存在するはずです:
fdisk -lroot@server1:~# fdisk -l
ディスク /dev/sda: 32.2 GB, 32212254720 バイト
255 ヘッド, 63 セクター/トラック, 3916 シリンダ
単位 = シリンダの 16065 * 512 = 8225280 バイト
セクターサイズ (論理/物理): 512 バイト / 512 バイト
I/O サイズ (最小/最適): 512 バイト / 512 バイト
ディスク識別子: 0x00029d5c
デバイス ブート 開始 終了 ブロック Id システム
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Extended
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
ディスク /dev/sdb: 32.2 GB, 32212254720 バイト
255 ヘッド, 63 セクター/トラック, 3916 シリンダ
単位 = シリンダの 16065 * 512 = 8225280 バイト
セクターサイズ (論理/物理): 512 バイト / 512 バイト
I/O サイズ (最小/最適): 512 バイト / 512 バイト
ディスク識別子: 0x31e0dc4b
デバイス ブート 開始 終了 ブロック Id システム
/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 removemv /var/lib/mysql/ /var/lib/mysql_bak
mkdir /var/lib/mysql
chown mysql:mysql /var/lib/mysql
chmod 700 /var/lib/mysql4 ホスト上のコンテナ用バインドマウントスクリプトの作成
ホスト:
ホスト上で、バインドマウントスクリプト/etc/vz/conf/101.mountを作成します(101を正しいコンテナIDに置き換えることを忘れないでください!):
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…そしてコンテナを再起動します(これが、3章でコンテナのためにMySQLのシステム起動リンクを無効にした理由です - 現在/var/lib/mysqlは空であり、これがMySQLエラーの原因になります):
vzctl restart 1015 コンテナ内でのバインドマウントの使用
コンテナ:
コンテナの再起動が完了したら、コンテナにログインして新しいマウントが存在するか確認できます:
mountroot@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 -hroot@test:~# df -h
ファイルシステム サイズ 使用 利用可能 使用% マウントポイント
/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 -laroot@test:/var/lib# ls -la
合計 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 defaults6 リンク
- OpenVZ: http://openvz.org/
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。