Vnx-modify-rootfs
Updating or modifying a VNX root filesystem
Contents
This document describes how to make permanent changes to a VNX root filesystem. The recomended way is to use VNX to start a virtual machine that mounts the rootfs in direct mode and make the desired changes from the VM console. Alternatevily, modifications can be made manually by mounting the rootfs in the host or manually starting a virtual machine. Both ways are described below.
Using VNX
You can modify a KVM or LXC root filesystem by using the --modify-rootfs option, for example:
vnx --modify-rootfs vnx_rootfs_kvm_debian.qcow2
This command starts new VM that mounts the vnx_rootfs_kvm_debian.qcow2 in direct mode. Therefore, any change made in the VM will persist after stopping it. Besides, the VM is started with Internet connectivity, by means of a network interface connected to libvirt virbr0 or LXC lxcbr0 bridges.
Several aditional parameters can be used with --modify-rootfs option:
- --arch to select processor architecture: i686 for 32 bits and x86_64 for 64 bits
- --vcpu to select the number of procesor cores to assign to the VM.
- --rootfs-type to specify the rootfs type (libvirt-kvm or lxc). If not specified, VNX tries to guess the type. Default value is libvirt-kvm.
- --mem to specify the memory to assign to the VM (ignored for LXC).
- --update-aced to try to automatically update the VNX autoconfiguration daemon (not applicable for LXC).
For example:
vnx --modify-rootfs vnx_rootfs_kvm_debian64.qcow2 --mem 512M --vcpu 4 --arch x86_64 --update-aced
Root filesystem modifications should be finished by executing vnx_halt command, that clears some system log files and caches (bash history, packages caches, etc) and optionally allows to write a one-line message describing the changes made that is stored in /etc/vnx_rootfs_version file.
Manually
KVM root filesystem
In order to update or modify a VNX root filesystem (rootfs from now on), you have two possible methods:
Mount the root filesystem from the host
The fastest way to modify a KVM root filesystem is by mounting it from the host and directly modifying it without starting a virtual machine. To do that:
- Create a ndb device with the filesystem:
modprobe nbd qemu-nbd -c /dev/nbd0 <rootfs_name>
being <rootfs_name> the rootfs filename.
fdisk -l /dev/ndb0
mount /dev/nbd0p1 /mnt
umount /mnt qemu-nbd -d /dev/nbd0
Examples:
- Ubuntu rootfs
$ modprobe nbd $ qemu-nbd -c /dev/nbd0 vnx_rootfs_kvm_ubuntu-12.04-v024.qcow2 $ fdisk -l /dev/nbd0 Disco /dev/nbd0: 8589 MB, 8589934592 bytes 255 cabezas, 63 sectores/pista, 1044 cilindros, 16777216 sectores en total Unidades = sectores de 1 * 512 = 512 bytes Tamaño de sector (lógico / físico): 512 bytes / 512 bytes Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes Identificador del disco: 0x0000e82c Dispositivo Inicio Comienzo Fin Bloques Id Sistema /dev/nbd0p1 * 2048 15728639 7863296 83 Linux /dev/nbd0p2 15730686 16775167 522241 5 Extendida /dev/nbd0p5 15730688 16775167 522240 82 Linux swap / Solaris $ mount /dev/nbd0p1 /mnt/ ... $ umount /mnt $ qemu-nbd -d /dev/nbd0 /dev/nbd0 disconnected
$ modprobe nbd $ qemu-nbd -c /dev/nbd0 vnx_rootfs_kvm_freebsd64-9.1-v025m2.qcow2 $ fdisk -l /dev/nbd0 AVISO: GPT (Tabla de partición GUID) detectado en '/dev/nbd0'! La utilidad fdisk no soporta GPT. Use GNU Parted. Disco /dev/nbd0: 12.9 GB, 12884901888 bytes 256 cabezas, 63 sectores/pista, 1560 cilindros, 25165824 sectores en total Unidades = sectores de 1 * 512 = 512 bytes Tamaño de sector (lógico / físico): 512 bytes / 512 bytes Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes Identificador del disco: 0x00000000 Dispositivo Inicio Comienzo Fin Bloques Id Sistema /dev/nbd0p1 * 1 25165823 12582911+ ee GPT $ parted /dev/nbd0 print Modelo: Desconocida (unknown) Disco /dev/nbd0: 12,9GB Tamaño de sector (lógico/físico): 512B/512B Tabla de particiones. gpt Numero Inicio Fin Tamaño Sistema de archivos Nombre Banderas 1 17,4kB 82,9kB 65,5kB 2 82,9kB 11,8GB 11,8GB freebsd-ufs 3 11,8GB 12,5GB 644MB $ mount -r -t ufs -o ufstype=ufs2 /dev/nbd0p2 /mnt/ $ ls /mnt/ bin boot COPYRIGHT dev etc lib libexec media mnt proc rescue root sbin sys tmp usr var $ umount /mnt $ qemu-nbd -d /dev/nbd0 /dev/nbd0 disconnected
Start a virtual machine in direct mode
To start a virtual machine directly mounting a rootfs and having Internet connection, you can use vnx command with the following parameters:
vnx --modify_rootfs <rootfs_name>
being <rootfs_name> the rootfs filename.
Alternatively, you can create a libvirt XML virtual machine definition (see examples in /usr/share/vnx/examples directory) and start it using virsh:
virsh create rootfs_XXX.xml
and manually opening the console using:
virt-viewer <vmname>
being <vmname> the name assigned by libvirt to the virtual machine (you can get it with "virsh list" command).
Once the virtual machine is started and you have access to the console, you can make the modifications desired.
At the end, halt the virtual machine using the vnx_halt command. This will clean some log and history files, clean the apt cache and optionally leave a text message in /etc/vnx_rootfs_version describing the modifications done.
Updating VNXACE daemon
If you have a rootfs with the autoconfiguration and command execution daemon (ACE) already installed, you can use the autoupdate functionality to update the daemon to a newer version. Just follow this procedure:
Linux and FreeBSD
- Start the virtual machine with the following command line options:
vnx --modify-rootfs <rootfs_name> --update-aced -y
being <rootfs_name> the rootfs filename. This command will try to update the VNXACE daemon to the latest version automatically (-y option).
- Mounting the update disk:
mount /dev/sdb /mnt # For Linux mount -t msdosfs /dev/ad1 /mnt # For FreeBSD
perl /mnt/vnxaced-lf/install_vnxaced
Windows
To be completed
Olive
To be completed