Comment puis-je augmenter la taille du disque sur une machine virtuelle vagabonde?

62

J'ai une machine virtuelle gérée par Vagrant utilisant VirtualBox sur un serveur hôte Ubuntu. Ma boîte Vagrant utilise la Debian 6.0.7 Puppet Labs basebox , qui utilise LVM pour sa partition racine.

Par défaut, le disque est de 8 Go, ce qui est trop petit pour mes besoins. J'aimerais:

  1. Augmentez la taille du disque existant et du système de fichiers sans détruire ni recréer ma machine virtuelle.
  2. Configurez Vagrant de manière à créer à l’avenir un disque plus volumineux pour ce projet.

Quelqu'un peut-il expliquer comment faire cela?

David Edwards
la source

Réponses:

25

Personnellement, je pense qu'il sera plus facile de connecter un disque dur virtuel supplémentaire et de le monter sur un point de montage approprié, par exemple, /optet de déplacer vos données rsyncpour résoudre ce problème. Après tout, les boîtes de marionnettes vagabondes servent uniquement à des tests.

Raison pour laquelle : VBoxManage modifyhdfonctionne uniquement avec une image VDI native. Cependant, les boîtes de base vagabondes sont essentiellement exportées au format OVF / OVA VMDK.

Voir Docs VirtualBox

L' --resize xoption (où x est le nouvel espace total souhaité en mégaoctets) vous permet de modifier la capacité d'une image existante. cela ajuste la taille logique d'un disque virtuel sans trop affecter la taille physique. [37] Cela ne fonctionne actuellement que pour les formats VDI et VHD, et uniquement pour les variantes allouées dynamiquement, et ne peut être utilisé que pour augmenter (et non pour réduire) la capacité.

Pour augmenter la capacité du disque pour Vagrant Base Box

Les étapes sont

  1. Pour pouvoir redimensionner le disque dur, vous devez d'abord le convertir en VDI, par exemple VBoxManage clonehd in.vmdk out.vdi --format VDI, puis le reconnecter (utiliser l'interface graphique est plus simple).

  2. Redimensionnez-le en utilisant VBoxManage modifyhd box.vdi --resize 15360ce qui augmente la capacité à 15 Go.

  3. Cependant, cela ne change que la capacité du lecteur, vous devrez ensuite développer le système de fichiers pour l'invité. Par exemple, utilisez resize2fs -p -F DEVICEpour ext {3,4}.

Terry Wang
la source
3
Notez qu’après le redimensionnement et le redémarrage de la zone vagrant, vous devez également mettre à jour la configuration de stockage de VirtualBox afin qu’elle utilise le nouveau VDI et non le VMDK d’origine: Dans VirtualBox> Stockage> Supprimer le disque dur> Ajouter un disque dur (sélectionnez un disque existant). et pointez sur la nouvelle image VDI)
Steve Swinsburg
Pour les utilisateurs de Debian, je suggère également de consulter ce post: blog.lenss.nl/2012/09/resize-a-vagrant-vmdk-drive . Quand je suis arrivé à l'étape 3, ce n'était pas aussi simple que de courir resize2fs. Bonne chance!
Phirschybar
1
Je viens d'écrire un guide consolidé à ce sujet: medium.com/@phirschybar/…
phirschybar
32

J'ai trouvé ce moyen le plus simple de résoudre ce problème:

  • Installez ce plugin: vagrant plugin install vagrant-disksize

  • Modifier le Vagrantfile:

    Vagrant.configure('2') do |config|
      ...
      config.vm.box = 'ubuntu/xenial64'
      config.disksize.size = '50GB'
      ...
    end
    
  • vagrant halt && vagrant up

    • Remarque: cela ne fonctionnera pas avec vagrant reload
Thucnguyen
la source
2
Travaillé comme un charme. Semble être la solution la plus simple que j'ai trouvée. Merci Monsieur.
Rico
1
Pour une boîte Debian9, cela augmente la taille du disque brut, mais pas la partition utilisée par l’installation Debian. L'augmentation de la taille du disque n'est pas directement utilisable.
Tonin
@Tonin avez-vous réussi à trouver une solution?
Mellkor
1
J'ai utilisé l' sudo cfdisk /dev/sdaoutil pour redimensionner ma /dev/sda1partition à tout l'espace nouvellement disponible. Puis j'ai dit à mon système de fichiers d'utiliser cet espace avecsudo resize2fs -p -F /dev/sda1
tutuDajuju
14

J'ai automatisé l'ajout du disque dans mon Vagrantfile:

Vagrant.configure("2") do |config|
    ...
    file_to_disk = File.realpath( "." ).to_s + "/disk.vdi"

    if ARGV[0] == "up" && ! File.exist?(file_to_disk) 
       puts "Creating 5GB disk #{file_to_disk}."
       vb.customize [
            'createhd', 
            '--filename', file_to_disk, 
            '--format', 'VDI', 
            '--size', 5000 * 1024 # 5 GB
            ] 
       vb.customize [
            'storageattach', :id, 
            '--storagectl', 'SATA Controller', 
            '--port', 1, '--device', 0, 
            '--type', 'hdd', '--medium', 
            file_to_disk
            ]
   ...
   config.vm.provision "shell", path: "scripts/add_new_disk.sh"
   ...
end

Où le add_new_disk.shscript shell ressemble à ceci:

set -e
set -x

if [ -f /etc/disk_added_date ]
then
   echo "disk already added so exiting."
   exit 0
fi


sudo fdisk -u /dev/sdb <<EOF
n
p
1


t
8e
w
EOF

pvcreate /dev/sdb1
vgextend VolGroup /dev/sdb1
lvextend /dev/VolGroup/lv_root
resize2fs /dev/VolGroup/lv_root

date > /etc/disk_added_date

Ce script est pour une boîte centos 6.4 , mais pourrait facilement être adapté à Ubuntu.

Au lieu d’ajouter un disque, les autres options sont les suivantes:

  • en utilisant une boîte avec un disque plus gros tel que opscode bento qui ont des disques de 40 Go
  • Construisez votre propre boîte en utilisant packer . Vous pouvez utiliser les définitions du packer de boîtes opscode comme point de départ
Chris Snow
la source
Bonjour, j'aimerais essayer votre solution. Pouvez-vous confirmer à quel endroit du fichier vagabond cette section de code a été ajoutée? Cordialement
Rudi Strydom
@RudiStrydom J'ai mis à jour la réponse - j'espère que cela aura plus de sens maintenant.
Chris Snow
2
Cela devrait ajouter dans le config.vm.provider :virtualbox do |vb|bloc pour rendre les choses plus claires
BT
1
Si vous obtenez une erreur "spécifiez la taille ou l'étendue" pour lvextend, essayez à la lvextend -l +100%FREE /dev/VolGroup/lv_rootplace
Andomar
1
Votre exemple créerait un disque de 5 To (l'unité --size est MB, voir virtualbox.org/manual/ch08.html#vboxmanage-createvdi ).
Backflip le
7

Vous pouvez utiliser le plugin, qui vous permettra de spécifier la taille du disque https://github.com/sprotheroe/vagrant-disksize

Shashi Ranjan
la source
Cela a redimensionné mon disque et développé la partition en une seule ligne de configuration. Très glissant!
user1026263
0

disclaimer: la réponse ne s'applique probablement qu'aux distributions utilisant une gestion de volume logique comme rhel pour lesquelles le cas d'utilisation suivant s'applique:

J'utilise la boîte vagabonde officielle Red Hat Enterpise 7.2 officiellement fournie par Red Hat .

(vous aurez besoin d'un compte développeur rhel que vous pourrez créer gratuitement)

Lors de l'installation, j'ai été troublé par le fait que seuls 8 Go étaient également disponibles:

sudo df -h
[vagrant@rhel-cdk ~]$ sudo df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root   8G  2,5G   6,5G  28% /
devtmpfs                     234M     0  234M   0% /dev
tmpfs                        245M     0  245M   0% /dev/shm
tmpfs                        245M  4,3M  241M   2% /run
tmpfs                        245M     0  245M   0% /sys/fs/cgroup
/dev/sda2                    297M  134M  164M  45% /boot
tmpfs                         49M     0   49M   0% /run/user/1000

Et comme vous pouvez le constater, la majeure partie de l’espace avait déjà été utilisée par l’installation de rhel.

Cependant, j'ai découvert que le groupe de volumes correspondant au système de /dev/mapper/VolGroup00-rootfichiers disposait d'un espace supplémentaire (qui, je suppose, en termes de boîte virtuelle était alloué dynamiquement)

sudo vgdisplay VolGroup00
  --- Volume group ---
  VG Name               VolGroup00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  11
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               39,70 GiB
  PE Size               4,00 MiB
  Total PE              10164
  Alloc PE / Size       7872 / 30,75 GiB
  Free  PE / Size       2292 / 8,95 GiB
  VG UUID               JBVwpl-13KX-HbQw-FqUa-CA9w-swpF-dF6glm

Il ne restait donc que les tâches suivantes:

a ) Augmenter la taille de notre volume logique par 10G

sudo lvextend -L+10G /dev/VolGroup00/root

et

b ) Mettez à jour votre système de fichiers racine afin qu'il prenne conscience de ce changement

sudo xfs_growfs /dev/mapper/VolGroup00-root

(Veuillez noter qu'au moins pour rhel 7.2 resize2fsne fonctionnera pas à cette fin).

Après cela, mon système de fichiers disposait d'un espace supplémentaire:

sudo df -h
Filesystem                   Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root   18G  2,5G   16G  14% /
devtmpfs                     234M     0  234M   0% /dev
tmpfs                        245M     0  245M   0% /dev/shm
tmpfs                        245M  4,3M  241M   2% /run
tmpfs                        245M     0  245M   0% /sys/fs/cgroup
/dev/sda2                    297M  134M  164M  45% /boot
tmpfs                         49M     0   49M   0% /run/user/1000

... pas d'intervention au niveau de la virtualbox

pkaramol
la source