72 votes

Comment augmenter la taille du disque sur une VM Vagrant ?

J'ai une VM gérée par Vagrant 使って VirtualBox sur un serveur hôte Ubuntu. Ma boîte Vagrant utilise la version 6.0.7 de Puppetlabs. boîte de base qui utilise LVM pour sa partition racine.

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

  1. Augmenter la taille du disque existant et le système de fichiers qu'il contient sans détruire et recréer ma VM.
  2. Configurez Vagrant pour qu'à l'avenir il crée un disque plus grand pour ce projet.

Quelqu'un peut-il m'expliquer comment faire ?

56voto

cosy Points 238

J'ai trouvé le 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

27voto

Terry Wang Points 8890

Personnellement, je pense qu'il sera plus facile d'attacher un disque dur virtuel supplémentaire et de le monter sur un point de montage approprié, par exemple /opt et déplacez vos affaires en utilisant rsync pour contourner ce problème, après tout, les boîtes vagrant Puppet sont destinées à des fins de test.

Raison pour laquelle : VBoxManage modifyhd ne fonctionne qu'avec l'image VDI native. Cependant, les boîtes de base de vagrant sont essentiellement des OVF/OVA exportés à l'aide de VMDK format.

Voir Docs sur VirtualBox

El --resize x (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 affecter beaucoup la taille physique.[37] Actuellement, cela ne fonctionne que pour les formats VDI et VHD, et uniquement pour les variantes à allocation dynamique, et ne peut être utilisé que pour étendre (et non 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 l'a ré-attaché (utiliser l'interface graphique est plus facile).

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

  3. Cependant, cela ne modifie que la capacité du disque, vous devrez ensuite étendre le système de fichiers pour l'invité. Par exemple, utilisez resize2fs -p -F DEVICE pour ext{3,4}.

15voto

Chris Snow Points 314

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

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.sh Shell 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 centos 6.4 box, mais pourrait facilement être adapté à ubuntu.

Au lieu d'ajouter un disque, d'autres options sont possibles :

  • en utilisant une boîte avec un disque plus grand comme opscode bento qui ont des disques de 40Gb
  • construisez votre propre boîte en utilisant emballeuse . Vous pouvez utiliser les définitions des emballeurs de boîtes opscode comme point de départ.

8voto

Firze Points 181

Installer le plugin Vagrant vagrant-disksize

vagrant plugin install vagrant-disksize

Si vous voulez ajouter que l'utilisateur doit avoir le plugin installé au démarrage de vagrant, vous pouvez ajouter ceci au début du fichier Vagrantfile

# Install vagrant-disksize to allow resizing the vagrant box disk.
unless Vagrant.has_plugin?("vagrant-disksize")
    raise  Vagrant::Errors::VagrantError.new, "vagrant-disksize plugin is missing. Please install it using 'vagrant plugin install vagrant-disksize' and rerun 'vagrant up'"
end

Définissez la taille de disque souhaitée dans le fichier Vagrant.

vagrant.configure('2') do |config|
    config.disksize.size = '50GB'
end

Mise à jour d'une boîte vagrant existante

  1. Faire tout ce qui précède
  2. Lancez vagrant halt & vagrant up (Vous devriez voir quelque chose comme "Resized disk : old 32768 MB, req 51200 MB, new 51200 MB").
  3. SSH à la boîte vagrant
  4. Exécuter sudo cfdisk /dev/sda
  5. Utilisez les flèches pour sélectionner votre disque probablement sdaX. Le mien était sda3.
  6. Sélectionnez ensuite Redimensionner à l'aide des touches fléchées. Acceptez la taille de disque suggérée.
  7. Puis sélectionnez écrire. Et répondez oui.
  8. Vous pouvez choisir de quitter maintenant.
  9. Exécuter sudo resize2fs -p -F /dev/sdaX Vous devriez voir quelque chose comme : "Le système de fichiers de /dev/sda3 est monté sur / ; redimensionnement en ligne nécessaire". old_desc_blocks = 4, new_desc_blocks = 6 Le système de fichiers sur /dev/sda3 a maintenant une longueur de 11933952 (4k) blocs. "
  10. Exécuter df et voyez que la taille de votre disque a augmenté.

7voto

shashi ranjan Points 71

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X