GNU/Linux >> Linux の 問題 >  >> Debian

Debian8でLXCとクォータをサポートする仮想コンテナをセットアップする方法

クォータサポートはlxcで頻繁にリクエストされる機能です。 Linuxファイルシステムのクォータは、複数のユーザーにコンテナへのアクセスを許可し、1人のユーザーがすべてのディスク領域を使用していないことを制御する場合に必要です。クォータは、Webホスティングサーバーにも必要です。 ISPConfig 3では、同じ理由で、1つのWebサイトがディスク全体をいっぱいにすることはできません。このハウツーでは、 lxcの使用方法を説明します qemu nbdを使用したハードディスククォータ Debian 8のqcow画像ファイルを使用 。

前提条件

lxcを使用するには、qemuユーティリティとlxcパッケージ自体が必要です。次の電話でインストールしてください:

apt-get install lxc qemu-utils

インストーラーは、後でlxc仮想マシンイメージをインストールするディレクトリを選択するように求めます。このディレクトリは、多くの空き領域があるパーティション上にある必要があります。 / varに十分なスペースがある場合は、デフォルトの/ var / lib / lxcを受け入れます。そうでない場合は、最大のパーティションで空きディレクトリを選択します。デフォルト以外のパスを使用する場合は、以下のすべてのコマンドと構成ファイルでパスを変更してください。

準備中

カーネルループモジュールがロードされているかどうかを確認します:

lsmod | grep '^loop'

結果が得られない場合は、次のコマンドを実行してモジュールを有効にできます:

modprobe loop

仮想マシンを作成する

これで、VMの作成を開始できます。このチュートリアルでは、ホストとコンテナーの両方でDebian Jessieを使用しますが、もちろん他のlxcテンプレートを使用することもできます。 g。 Debianwheezyまたはubuntu。

lxc-create -B loop -t debian -n mydebianvm --fssize=20G -- -r jessie

-t 引数はメインテンプレート-rを選択します 使用するリリースを決定します。仮想マシンのハードディスクサイズを設定するには、-fssizeを変更します。 口論。 50ギガバイトのディスクを作成するとし、引数を-fssize =50Gに変更するとします。 。
引数-n vmの名前を設定します。 mydebianvmを使用しました このチュートリアルでは。以下のすべてのコマンドで、選択した内容に応じて名前を変更してください。

生のイメージファイルを使用したくないので、ディスクイメージをqemu qcow2に変換する必要があります フォーマット。これは次のコマンドで実行されます

qemu-img convert -O qcow2 /var/lib/lxc/mydebianvm/rootdev /var/lib/lxc/mydebianvm/rootdev.qcow2

バックアップ処理を簡単にするために、後でイメージファイルセットを作成します。 e。デバイスへのすべての変更を記録する2番目のファイル。

qemu-img create -f qcow2 -b /var/lib/lxc/mydebianvm/rootdev.qcow2 /var/lib/lxc/mydebianvm/rootdev-live.qcow2

次のコマンドで元のRAW画像ファイルを削除できるようになりました:

rm /var/lib/lxc/mydebianvm/rootdev

ネットワークブリッジを構成する

bridge-utilsをインストールします:

apt-get install bridge-utils

エディターでDebianネットワーク構成ファイル/etc/ network/interfacesを開きます

vim /etc/network/interfaces

次の行を追加します:

auto br0 
iface br0 inet static
     address 192.168.1.254
     netmask 255.255.255.0
     bridge_ports eth0
     bridge_stp off
     bridge_fd 2
     bridge_maxwait 20

アドレスとネットマスクをローカルネットワークの値に置き換えます。

次に、次のコマンドを使用してネットワークブリッジをアクティブにします。

ifup br0

VMを構成する

古い構成ファイルをバックアップします:

mv /var/lib/lxc/mydebianvm/config /var/lib/lxc/mydebianvm/config_bak

そして、コンテナの構成を作成します:

vim /var/lib/lxc/mydebianvm/config

そして、ファイルに次のコンテンツを追加します。

lxc.rootfs = /var/lib/lxc/mydebianvm/rootfs
lxc.rootfs.options = usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0

lxc.hook.pre-start = /var/lib/lxc/prestart-nbd.sh
lxc.hook.post-stop = /var/lib/lxc/poststop-nbd.sh

# Common configuration
lxc.include = /usr/share/lxc/config/debian.common.conf

# only if bridge is set up (or use other method)
lxc.network.type = veth
lxc.network.name = veth0
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 192.168.1.101/24
lxc.network.ipv4.gateway = 0.0.0.0

# Container specific configuration
lxc.mount = /var/lib/lxc/mydebianvm/fstab
lxc.utsname = debian8
lxc.arch = amd64
lxc.autodev = 1
lxc.kmsg = 0

IPアドレス192.168.1.101をネットワークからの空きIPに置き換えます。

プレスタートスクリプト/var/lib/lxc/prestart-nbd.sh

を追加します
vim /var/lib/lxc/prestart-nbd.sh

次の内容で:

#!/bin/bash
CHK=$(lsmod | grep '^nbd');
if [[ "$CHK" == "" ]] ; then
modprobe nbd nbds_max=64 max_part=8
fi
DEV=""

for D in /dev/nbd* ; do
F=$(basename $D)
if [[ $(lsblk | grep "^${F} ") == "" ]] ; then
DEV="$D"
break;
fi
done

echo "Next free NBD is $DEV";

CHK=$(lsof /var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2 | grep 'qemu-nbd' | awk '{ print $2 }');
if [[ "$CHK" == "" ]] ; then
if [[ "$DEV" == "" ]] ; then
print "No free nbd device found";
exit 1;
fi
echo "Connecting $DEV to /var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2"
qemu-nbd -c ${DEV} -n --aio=native /var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2
else
NBD=$(lsof -p ${CHK} | grep '/dev/nbd' | awk '{ print $9 }');
if [[ "$NBD" != "" ]] ; then
echo "/var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2 is already connected to $NBD"
DEV="$NBD";
else
echo "/var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2 is used by suspicious PID";
exit 1;
fi
fi

CHK=$(mount | grep " /var/lib/lxc/${LXC_NAME}/rootfs ")
if [[ "$CHK" == "" ]] ; then
echo "/var/lib/lxc/${LXC_NAME}/rootfs not mounted";
echo "Mounting ${DEV} to /var/lib/lxc/${LXC_NAME}/rootfs"
mount ${DEV} /var/lib/lxc/${LXC_NAME}/rootfs
fi
echo "${DEV} ${DEV:1} none bind,create=file,optional 0 0" > /var/lib/lxc/${LXC_NAME}/fstab

実行可能にします:

chmod +x /var/lib/lxc/prestart-nbd.sh

ポストストップスクリプト/var/lib/lxc/poststop-nbd.sh

を追加します
vim /var/lib/lxc/poststop-nbd.sh

次の内容で:

#!/bin/bash
CHK=$(mount | grep " /var/lib/lxc/${LXC_NAME}/rootfs " | awk '{ print $1 }')
if [[ "$CHK" != "" ]] ; then
echo "Unmounting ${CHK} from /var/lib/lxc/${LXC_NAME}/rootfs"
echo "Disconnecting ${CHK}"
umount /var/lib/lxc/${LXC_NAME}/rootfs && qemu-nbd -d ${CHK}
fi

実行可能にします:

chmod +x /var/lib/lxc/poststop-nbd.sh

VMを起動してクォータを設定します

これで、次のように入力して、コンテナをバックグラウンドモードで起動できます。

lxc-start -n mydebianvm -d

クォータに必要なパッケージをインストールします。このためにコンテナに入る必要はありません。 lxc-attachを使用すると、コンテナーの外部からコマンドを実行できます。

lxc-attach -n mydebianvm -- apt-get -y update
lxc-attach -n mydebianvm -- apt-get -y install quota

lxc-attachを介してquotaをアクティブ化することはできません。そこで、コンテナの次回の起動時に実行されるbashスクリプトを作成します

vim /var/lib/lxc/mydebianvm/rootfs/opt/actquota.sh

次の内容で:

#!/bin/bash
mount -o remount,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 /
touch /aquota.user /aquota.group
chmod 0600 /aquota.*
quotacheck -cmug /
quotaon -avug
echo '#!/bin/sh -e
exit 0' > /etc/rc.local
rm -f /opt/actquota.sh

スクリプトはそれ自体を削除し、後でコンテナの/etc/rc.localを空にします。
ここで、bashスクリプトが実行可能であり、起動時に呼び出されることを確認します。

実行可能にする:

chmod 700 /var/lib/lxc/mydebianvm/rootfs/opt/actquota.sh

vmのrc.localファイルへの呼び出しを追加します:

echo '#!/bin/bash
if [[ -e "/opt/actquota.sh" ]] ; then
/opt/actquota.sh
fi' > /var/lib/lxc/mydebianvm/rootfs/etc/rc.local

すべての前提条件が設定されたら、コンテナを再起動できます。手順を正しく実行すると、クォータがアクティブになります。

lxc-stop -r -n mydebianvm

結果を確認する

ここで、クォータが機能しているかどうかを確認する必要があります。コンテナに変更します。

lxc-attach -n mydebianvm

コンテナタイプの内部:

repquota -avug

これで、ユーザーとグループの使用済みクォータが表示されます。

仮想マシンを破棄する

非常に重要 コマンドを正しい順序で使用します。 nbdデバイスを切断する前に、コンテナが実行されている場合はコンテナを停止する必要があります。

lxc-stop -n mydebianvm

その後、ルートfsをアンマウントする必要があります。

umount /var/lib/lxc/mydebianvm/rootfs

最後のステップは、nbdを切断することです。必ず正しいデバイス番号を選択してください。
絶対に rootfsをアンマウントする前に、nbdを切断してください。これは多くの問題を引き起こし、ホストを完全に強制的に再起動する必要があります。

qemu-nbd -d /dev/nbd0

VMのバックアップ

コンテナのイメージファイルを作成するときに2つのファイルを作成したため、VMを停止せずに簡単にバックアップできます。まず、その間に発生した変更をベースファイルにコミットする必要があります。

qemu-img commit /var/lib/lxc/mydebianvm/rootdev-live.qcow2

/var/lib/lxc/mydebianvm/rootdev.qcow2 これで、VMのハードディスクの現在の状態が含まれるため、このファイルをバックアップできます。


Debian
  1. Debian8ミニマリストDockerホストをインストールしてセットアップする方法

  2. Debian10でレプリケーションスロットを使用してPostgreSQLストリーミングレプリケーションを設定する方法

  3. Ubuntu/Debianでmod_fcgidを使用してApacheとPhpをセットアップします

  1. Debian 9StretchLinuxでNTPサーバーとクライアントをセットアップする方法

  2. Debian7VPSでExim4とDBMailを使用してメールサーバーをセットアップする方法

  3. Debian9でHTTP/2サポートを使用してNginxを設定する方法

  1. Debianでvsftpdをセットアップする方法

  2. Debian9でApacheを使用してphpMyAdminをインストールして保護する方法

  3. LXC コマンドを使用して LXC Linux コンテナを作成および起動する方法