OpenVZ 튜토리얼 · 7 min read · Oct 11, 2025
OpenVZ: 호스트 장치/파티션/디렉토리를 바인드 마운트를 사용하여 컨테이너에 마운트하기 (Debian/Ubuntu)
OpenVZ: 호스트 장치/파티션/디렉토리를 바인드 마운트를 사용하여 컨테이너에 마운트하기 (Debian/Ubuntu)
버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요
때때로 OpenVZ 호스트의 하드 드라이브, 파티션 또는 디렉토리를 OpenVZ 컨테이너 내에 마운트해야 하는 상황이 발생합니다. 예를 들어, 호스트에 빠른 SSD를 추가하고 MySQL 데이터베이스를 그곳에 두어 MySQL을 더 빠르게 만들고 싶을 수 있습니다. 이 튜토리얼에서는 바인드 마운트를 사용하여 OpenVZ 컨테이너에 호스트 장치/파티션/디렉토리를 마운트하는 방법을 설명합니다.
이 방법이 여러분에게 작동할 것이라는 보장은 하지 않습니다!
1 사전 주의사항
이 튜토리얼에서는 MySQL을 실행 중인 컨테이너 ID 101을 가진 OpenVZ 컨테이너가 있습니다. 호스트에 두 번째 하드 드라이브를 추가하고 컨테이너의 MySQL 디렉토리 /var/lib/mysql을 두 번째 하드 드라이브에 두고 싶습니다.
2 호스트 준비하기
호스트:
호스트에 새 하드 드라이브를 추가한 경우, 다음의 출력에서 확인할 수 있어야 합니다…
fdisk -l… 그리고 포맷되지 않은 상태여야 합니다(이전에 파티션을 생성하지 않았다면) - 이 예제에서 하드 드라이브는 /dev/sdb입니다:
root@server1:~# fdisk -l
디스크 /dev/sda: 32.2 GB, 32212254720 바이트
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 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 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 바이트
섹터 크기 (논리/물리): 512 바이트 / 512 바이트
I/O 크기 (최소/최적): 512 바이트 / 512 바이트
디스크 식별자: 0x00000000
디스크 /dev/sdb는 유효한 파티션 테이블을 포함하지 않습니다
root@server1:~#하나의 파티션을 생성해 보겠습니다:
fdisk /dev/sdbroot@server1:~# fdisk /dev/sdb
장치에는 유효한 DOS 파티션 테이블이나 Sun, SGI 또는 OSF 디스크 레이블이 없습니다
디스크 식별자 0x31e0dc4b로 새로운 DOS 디스크 레이블을 생성합니다.
변경 사항은 작성하기로 결정할 때까지 메모리에만 남습니다.
그 후에는 이전 내용을 복구할 수 없습니다.
경고: 파티션 테이블 4의 잘못된 플래그 0x0000이 w(rite)에 의해 수정됩니다.
경고: DOS 호환 모드는 더 이상 사용되지 않습니다.
모드를 끄고(명령 ‘c’) 표시 단위를 섹터로 변경하는 것이 강력히 권장됩니다(명령 ‘u’).
명령 (도움말은 m): <– n
명령 작업
e extended
p primary partition (1-4)
<– p
파티션 번호 (1-4): <– 1
첫 번째 실린더 (1-3916, 기본값 1): <– ENTER
기본값 1 사용
마지막 실린더, +cylinders 또는 +size{K,M,G} (1-3916, 기본값 3916): <– ENTER
기본값 3916 사용
명령 (도움말은 m): <– t
선택된 파티션 1
16진수 코드 (코드를 나열하려면 L): <– L
0 빈 24 NEC DOS 81 Minix / old 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 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx
5 Extended 42 SFS 86 NTFS volume set da Non-FS data
6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access
a 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 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1
16진수 코드 (코드를 나열하려면 L): <– 83
명령 (도움말은 m): <– w
파티션 테이블이 변경되었습니다!
ioctl()를 호출하여 파티션 테이블을 다시 읽습니다.
디스크를 동기화합니다.
root@server1:~#
그 후에는 /dev/sdb1 파티션이 있어야 합니다:
fdisk -lroot@server1:~# fdisk -l
디스크 /dev/sda: 32.2 GB, 32212254720 바이트
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 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 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 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/
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.