Sanal bir disk görüntüsünü oldukça manuel bir şekilde klonlamaya çalışıyorum. Metodolojime genel bakış şu şekildedir:
- VirtualBox'da 120GB HDD'ye sahip sanal makine oluşturun (hiper yönetici ve HDD boyutu önemli değil, çoğunlukla sorumun tamamıyla bütünlüğü ve tutarlılığı içeriyor, örneğin bölüm boyutları gibi)
- Ubuntu 12.04.3'ü sanal makineye yükleyin
- Sanal makineyi kapat
- Sanal makine ile ilişkilendirilmiş sanal sabit diski takın
- Bir dizinde depolamak için işletim sistemi dosyalarını ve verileri ayıklayın
- Sanal sabit disk meta verilerini kaydedin
- Yeni sanal disk oluşturun ve bölümleri ve önyükleme bilgilerini geri yükleyin (6)
- Verileri (5) den doğru bölüme geri yükle
Sorun
Kopyalanan VM'im tam olarak açılmıyor. Grub kopyalamak görünüyor ve görünür (Ubuntu üzerinde yüklü) benim kök bölümü kabul etmek. Grub'u bir kez önyükleyebilir ve Ubuntu'nun yükleneceği gibi mor bir ekran alabilirim. Sonra durur. Ondan sonra Grub'a boot edebilirim, işletim sistemimi seçebilirim, sonra yanıp sönen bir komut satırı imleci elde ederim. Giriş mümkün değil. Klonlama sürecinde eksik olduğum bir şey olduğundan şüpheleniyorum (daha fazla ayrıntı için aşağıya bakın). Not: Grub2 kullanıyorum, eski değil.
Bunu neden yapıyorsun?
Sözleşmeye bağlı bir gereksinimin parçası olarak, sanal diski sürüm denetiminde saklamam gerekiyor. Sürüm kontrolünde muazzam bir ikili bloğun (sanal disk) olması, çoğunlukla klon (git) / ödeme (svn) için değil aynı zamanda farklılıklar için de acı vericidir. Birden fazla dosyaya sıkıştırmayı düşündüm, ancak yukarıda (5) 'te çıkarılan işletim sistemi / verileri değiştirebilmem gerekiyor. VCS depomun hala tam bir VM oluşturmak için gereken tüm bilgilere ihtiyacı olduğunu unutmayın.
detay
Tarif ettiklerimi çoğaltmak için ayrıntılı talimatlar:
- Bir VM oluşturun ve Ubuntu Live CD'sini başlatın
- "Ubuntu'yu Dene" yi seçin
- Bir terminal aç
- Bir msdos bölümü oluşturun: sudo parted / dev / sda mklabel msdos
- 2GB takas dosyası oluşturun: sudo parted / dev / sda mkpart primer linux-swap 2048'ler 4198399s
- Sürücünün geri kalanını kök bölüm için kullanın: sudo parted / dev / sda mkpart birincil ext4 4198400s 100%
- Makineyi yeniden başlatın, "Ubuntu Yükle" yi seçin
- Gelişmiş bölümleme seçeneğini seçin
- Takas bölümünü çift tıklayın, takas olarak kullanmayı seçin
- Kök bölümünü çift tıklatın, biçimlendirmeyi seçin ve kök (/) bağlama noktası için kullanın
Şimdi diski klonlamak için aşağıdakileri yapın:
# Set up some parameters
ORIG_DEV="/dev/nbd0"
ORIG_MNT=$(mktemp -d)
ORIG_IMG="orig.vdi"
CLONE_DEV="/dev/nbd1"
CLONE_MNT=$(mktemp -d)
CLONE_IMG="clone.vdi"
qemu-img info $ORIG_IMG # save the "virtual size" output (in bytes) in the
# VIRT_SIZE variable in the next command
VIRT_SIZE="128849018880"
# Create the clone disk
qemu-img create -f vdi $CLONE_IMG $VIRT_SIZE
# Use qemu to make both disks accessible
modprobe nbd
qemu-nbd -c $ORIG_DEV $ORIG_IMG
qemu-nbd -c $CLONE_DEV $CLONE_IMG
# Set up the clone disk partition table and partitions
parted $CLONE_DEV mklabel msdos
parted $CLONE_DEV mkpart primary linux-swap 2048s 4198399s
parted $CLONE_DEV mkpart primary ext4 4198400s 100%
# Format the clone disk partitions and clone the UUIDs
mkswap $CLONE_DEVp1 -U $(blkid $ORIG_DEVp1 -s UUID -o value)
mkfs.ext4 $CLONE_DEVp2 -U $(blkid $ORIG_DEVp2 -s UUID -o value)
# Mount both disks and copy root from the original to the clone
mount $CLONE_DEVp2 $CLONE_MNT
mount $ORIG_DEVp2 $ORIG_MNT
find $ORIG_MNT -maxdepth 1 -mindepth 1 | xargs -I{} cp -ar {} $CLONE_MNT
umount $ORIG_MNT
umount $CLONE_MNT
# Copy the boot sector and partition table from the original
dd if=$ORIG_DEV of=$CLONE_DEV bs=$((2048*512)) count=1
# Disconnect the disks
qemu-nbd -d $CLONE_DEV
qemu-nbd -d $ORIG_DEV
Başka ne denedin?
- grub-install --root-directory = / yol / to / klon / aygıt / önyükleme / / dev / clone_device. Bu, Grub'u doğru cihaza kurdu ancak ana bilgisayarımın cihaz detayları. VM önyükleme yapmaz.
- Klon disk içine chroot, sonra grub-install. Karşılaştığım sorun, 32 bit konukları klonlamak için 64 bit ana bilgisayarı kullanabilmem gerektiğinden. Bu, araştırılacak umutlu bir yol gibi görünüyor, ancak bunu nasıl yapacağım konusunda sıkıştım.
- Sanal diski takın, tüm dosyaları kullanarak veri bölümünden çıkarın, verileri
mv
sıfırlayın ve bölümleri değiştirin (dd if=/dev/zero of=/dev/nbd0p2
) ve sanal diski (kullanarakVBoxManage modifyhd clone.vdi --compress
) sıkıştırın . Disk, bu boş alanla (hah!) Doldurduğu için ana bilgisayar dosya sistemimde genişlemeye başladı. Bunundd
olduğunu fark ettiğimde durdum , sonra disk görüntüsünü sıkıştırdım. Hala 3GB bitti. (Gzip / bzip'i kullanmayı denemedim, bu akşam bu denemeye başlayacağım. Ayrıca dd silme işleminin tamamlanmasına izin vermeye çalışacağım, ancak bu işe yarasa bile daha az zaman alan bir çözüm tercih ederim.) . - e2image. Diğer sorumu görün: e2image dosya sistemi meta verilerini geri yükleme . Bunu çözmedim. Adımlar Ben de sağladığını unutmayın Detay bölüm oluşturma, biçimlendirme ve önyükleme kesimi kopyalama dahil bölümünde, ancak önce ben kök bölümü kopyalamak, e2image yarattığı buna çok benzer bir büyüklükte görüntü dosyası üretmek.
- Grub-install programını çalıştırmak için başka bir VM'ye önyükleme yapın. Bunu aslında yapmadım, ancak birinin önermesi durumunda buraya dahil ettim. Kullanıcılarım için sanal makinenin yeniden kodlanabilmesi için yeniden düzenlemeye ihtiyacım var; Bu, ilgili bir kurulum sürecini engeller.
- Grub yerine extlinux'u kurun. Başarısız olsa da, bu alıştırma (sanırım!) Bootloader'ın ram diskini bölümümden başarıyla yüklediğini ancak bu noktada takılıp kaldığını gösteriyor.
Eğer bu kadar ileri girdiysen, şimdiden teşekkür ederim! Soruşturma yolları için yapılan öneriler, ancak ne yazık ki, çok fazla takdir edilmeyecektir. Şimdiden teşekkürler.
-r
yerine parametreden bahseder -Q
. Size kesinlikle yardımcı olabilecek, yaratıcısı Theodore Ts'o ile bağlantı kurmayı deneyebilirsiniz .
e2image -r
çünkü deneyimlerime göre Windows, seyrek dosyaları depolamak konusunda çok iyi bir iş çıkarmıyor; Bununla birlikte, söz konusu Windows deneyimimdeki seyrek dosyalar ile olan deneyimim çok sınırlı, bu zorlukla takip ettim ve kesinlikle daha fazla araştırma yapmak için gerekli görünüyor; öneri için çok teşekkür ederim, ben bir göz atacağım ve nasıl gideceğini size bildireceğim.