Dukungan kuota adalah fitur yang sering diminta di lxc. Kuota sistem file Linux diperlukan saat Anda ingin memberikan akses ke beberapa pengguna ke wadah dan ingin mengontrol bahwa satu pengguna tidak menggunakan semua ruang disk. Kuota juga diperlukan untuk server web hosting, mis. dengan ISPConfig 3, untuk alasan yang sama:satu situs web tidak akan dapat mengisi seluruh disk. Howto ini menunjukkan kepada Anda, bagaimana Anda dapat menggunakan lxc dengan kuota harddisk menggunakan qemu nbd dengan file gambar qcow di Debian 8 .
Prasyarat
Untuk menggunakan lxc, Anda memerlukan utilitas qemu dan paket lxc itu sendiri. Instal dengan menelepon:
apt-get install lxc qemu-utils
Pemasang akan meminta Anda untuk memilih direktori tempat image mesin virtual lxc diinstal nanti. Direktori ini harus berada di partisi dengan banyak ruang kosong. Jika Anda memiliki cukup ruang di /var, terima /var/lib/lxc default, jika tidak, pilih direktori gratis di partisi terbesar Anda. Saat Anda menggunakan jalur non-default, pastikan untuk mengubah jalur di semua perintah dan file konfigurasi di bawah ini.
Mempersiapkan
Periksa apakah modul loop kernel dimuat dengan:
lsmod | grep '^loop'
Jika tidak mendapatkan hasil, Anda dapat mengaktifkan modul dengan menjalankan:
modprobe loop
Buat mesin virtual
Sekarang kita bisa mulai membuat VM. Dalam tutorial ini, saya akan menggunakan Debian Jessie di host dan container, tetapi Anda dapat menggunakan template lxc lainnya tentunya, mis. g. Debian wheezy atau ubuntu.
lxc-create -B loop -t debian -n mydebianvm --fssize=20G -- -r jessie
-t argumen memilih template utama, -r memutuskan rilis mana yang akan digunakan. Untuk mengatur ukuran hard disk untuk mesin virtual, Anda dapat mengubah --fssize argumen. Katakanlah Anda ingin membuat disk dengan 50 gigabyte, Anda akan mengubah argumen menjadi --fssize=50G .
Argumen -n menetapkan nama vm. Saya menggunakan mydebianvm dalam tutorial ini. Silakan ubah nama di semua perintah berikut sesuai dengan yang Anda pilih.
Karena kita tidak ingin menggunakan file gambar mentah, kita perlu mengonversi gambar disk ke qemu qcow2 format. Ini dilakukan dengan perintah berikut
qemu-img convert -O qcow2 /var/lib/lxc/mydebianvm/rootdev /var/lib/lxc/mydebianvm/rootdev.qcow2
Untuk mempermudah penanganan pencadangan, nanti kita buat kumpulan file gambar, mis. e. file kedua yang mencatat semua perubahan pada perangkat.
qemu-img create -f qcow2 -b /var/lib/lxc/mydebianvm/rootdev.qcow2 /var/lib/lxc/mydebianvm/rootdev-live.qcow2
Anda sekarang dapat menghapus file gambar mentah asli dengan:
rm /var/lib/lxc/mydebianvm/rootdev
Konfigurasikan Jembatan Jaringan
Instal bridge-utils:
apt-get install bridge-utils
Buka file konfigurasi Jaringan Debian /etc/network/interfaces di editor
vim /etc/network/interfaces
dan tambahkan baris berikut:
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
Ganti alamat dan netmask dengan nilai untuk jaringan lokal Anda.
Kemudian aktifkan network bridge dengan perintah:
ifup br0
Konfigurasikan VM
Cadangkan file konfigurasi lama:
mv /var/lib/lxc/mydebianvm/config /var/lib/lxc/mydebianvm/config_bak
Dan buat konfigurasi untuk wadah:
vim /var/lib/lxc/mydebianvm/config
Dan tambahkan konten berikut ke dalam file:
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
Ganti IP-Address 192.168.1.101 dengan IP gratis dari jaringan Anda.
Tambahkan skrip prestart /var/lib/lxc/prestart-nbd.sh
vim /var/lib/lxc/prestart-nbd.sh
dengan isi sebagai berikut:
#!/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
dan membuatnya dapat dieksekusi:
chmod +x /var/lib/lxc/prestart-nbd.sh
Tambahkan skrip poststop /var/lib/lxc/poststop-nbd.sh
vim /var/lib/lxc/poststop-nbd.sh
dengan isi sebagai berikut:
#!/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
dan membuatnya dapat dieksekusi:
chmod +x /var/lib/lxc/poststop-nbd.sh
Mulai VM dan kuota penyiapan
Sekarang kita dapat memulai wadah dalam mode latar belakang dengan mengetik:
lxc-start -n mydebianvm -d
Instal paket yang diperlukan untuk kuota. Kita tidak perlu memasukkan wadah untuk ini. Menggunakan lxc-attach kita dapat menjalankan perintah dari luar container.
lxc-attach -n mydebianvm -- apt-get -y update
lxc-attach -n mydebianvm -- apt-get -y install quota
Tidak mungkin untuk mengaktifkan kuota melalui lxc-attach. Jadi kami membuat skrip bash, yang dieksekusi pada boot wadah berikutnya
vim /var/lib/lxc/mydebianvm/rootfs/opt/actquota.sh
dengan isi sebagai berikut:
#!/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
Skrip akan menghapus dirinya sendiri dan mengosongkan /etc/rc.local dari wadah setelahnya.
Sekarang pastikan skrip bash dapat dieksekusi dan dipanggil saat start-up:
Jadikan itu dapat dieksekusi:
chmod 700 /var/lib/lxc/mydebianvm/rootfs/opt/actquota.sh
Tambahkan panggilan ke file rc.local vm:
echo '#!/bin/bash
if [[ -e "/opt/actquota.sh" ]] ; then
/opt/actquota.sh
fi' > /var/lib/lxc/mydebianvm/rootfs/etc/rc.local
Dengan semua penyiapan prasyarat, kini Anda dapat memulai ulang penampung. Jika Anda telah mengikuti langkah-langkah dengan benar, ini akan mengaktifkan kuota.
lxc-stop -r -n mydebianvm
Verifikasi hasil
Anda sekarang harus memeriksa apakah kuota berfungsi. Ubah ke penampung.
lxc-attach -n mydebianvm
Di dalam jenis wadah:
repquota -avug
Anda akan melihat kuota pengguna dan grup yang digunakan sekarang.
Menghancurkan mesin virtual
Ini sangat penting untuk menggunakan perintah dalam urutan yang benar. Sebelum Anda dapat memutuskan sambungan perangkat nbd, Anda harus menghentikan wadah jika sedang berjalan:
lxc-stop -n mydebianvm
Setelah itu, Anda harus meng-unmount root fs.
umount /var/lib/lxc/mydebianvm/rootfs
Langkah terakhir adalah memutuskan sambungan nbd. Pastikan untuk memilih nomor perangkat yang benar.
TIDAK PERNAH lepaskan nbd sebelum Anda melepas rootfs. Ini akan menyebabkan banyak masalah dan akan memerlukan boot ulang paksa penuh dari host Anda.
qemu-nbd -d /dev/nbd0
Cadangkan VM
Karena kami telah membuat dua file saat membuat file gambar untuk wadah, kami dapat dengan mudah membuat cadangan tanpa menghentikan vm. Pertama, kita perlu mengkomit perubahan yang terjadi sementara itu ke file dasar.
qemu-img commit /var/lib/lxc/mydebianvm/rootdev-live.qcow2
/var/lib/lxc/mydebianvm/rootdev.qcow2 sekarang berisi status hard disk vm saat ini, sehingga Anda dapat mencadangkan file ini.