GNU/Linux >> Belajar Linux >  >> Debian

Cara mengatur wadah virtual dengan LXC dan dukungan kuota di Debian 8

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.


Debian
  1. Cara menginstal dan mengatur Debian 8 Docker Host minimalis

  2. Cara Setup NTP Server dan Client di Debian 9 Stretch Linux

  3. Cara mengatur Replikasi Streaming PostgreSQL dengan Slot Replikasi di Debian 10

  1. Setup Apache dan Php dengan mod_fcgid di Ubuntu/Debian

  2. Cara mengatur server surat dengan Exim4 dan DBMail di Debian 7 VPS

  3. Cara Mengatur Nginx dengan Dukungan HTTP/2 di Debian 9

  1. Cara mengatur vsftpd di Debian

  2. Cara Menginstal dan Mengamankan phpMyAdmin dengan Apache di Debian 9

  3. Cara Membuat dan Meluncurkan Kontainer Linux LXC dengan Perintah LXC