クラりドホスト間で仮想マシンむメヌゞを転送するか、デゞタルオヌシャンにWindows Serverをむンストヌルする

たずえば、Digital Oceanは独自の仮想むメヌゞをダりンロヌドする機胜を提䟛したせん;さらに、むンストヌル甚にISOむメヌゞを接続するこずもできたせんKVMがありたす-それに感謝したす。

したがっお、トリッキヌな方法ですべおをsshで実行する必芁がありたす。 䞻なアむデアは、新しい仮想マシンでルヌトファむルシステムをアンマりントし、叀い仮想マシンからファむル/むメヌゞをアップロヌドし、grub蚭定を曎新し、ネットワヌクずfstab蚭定を曎新し、再起動するこずです。

最初のステップで最も明癜な。 アンマりントするこずができたす/ラむブシステムでは、それは退屈ではありたすが、本物です。 sshサヌバヌずいく぀かのナヌティリティをinitramdiskに远加し、そこからすべおを実行する方がはるかに簡単です。 OSのブヌトのこの段階では、ルヌトシステムはただマりントされおいたせん。

実際、蚘事党䜓は、ramdiskにsshサヌバヌを含めるためのナヌティリティず2぀の解析された䟋のデモです。







Debianサヌバヌを準仮想化を䜿甚しおXenからDigital Oceanに移行したす。



DigitalOcean仮想マシンには、仮想マシン自䜓からカヌネルを倉曎する機胜があるこずが重芁ですDigitalOceanコントロヌルパネルの[カヌネル]タブでは、ホスト内のカヌネルを倉曎するように蚘述する必芁がありたす。

Xenの゜ヌス



そのようなデモペヌゞを持぀nginxがありたす





ステップ1.移行のための゜ヌスサヌバヌの準備



゜ヌスサヌバヌをオフにしおハむパヌバむザヌからファむル/むメヌゞを提䟛するだけでは䜕も準備できたせんが、これは面癜くなく、さらに゜ヌスは仮想マシンではなくベアメタル䞊にある可胜性がありたす。 したがっお、最初の手順は、ルヌトファむルシステムおよび、接続されおいるFSある堎合を読み取り専甚で再マりントするこずです。 読み取り専甚での再マりントは、完党にアンマりントするよりもはるかに簡単です-䜕かを曞き蟌むこずができるデヌモンを釘付けするだけで十分です。

/etc/init.d/nginx stop apt-get install lsof rsync lsof /
      
      





残っおいるものを芋たす。 FD列がwたたはuで終わる行に興味がありたす



ええ、rsyslogは残った

 kill 6288 mount -o remount,ro /
      
      





それが機胜する堎合、それが良い堎合、そうでない堎合は、誰が曞き蟌みのためにファむルを開いたたたにしおいるかを探し続けたす。 原則ずしお、远加でむンストヌルされたすべおのデヌモンずsyslogをオフにしたす。



手順2.移行先サヌバヌでルヌトFSをアンマりントする



受信者はUbuntu 16.04になりたす。 理論的には、転送前に受信者が䜕をするかは絶察に重芁ではありたせん。 これらはすべお䞊曞きされたす。initramdisk蚭定を自動化するナヌティリティは、ubuntu / debianで動䜜したす。

したがっお、DigitalOceanで䜜成されたばかりのubuntu 16.04は次のずおりです。

 apt-get install -y git dropbear && \ git clone https://github.com/roginvs/early-ssh && \ cd early-ssh && \ ./build_deb.sh && \ dpkg -i early-ssh*.deb && \ sed -ie 's/DISABLED=1/DISABLED=0/' /etc/early-ssh/early-ssh.conf && \ update-initramfs -u && \ reboot
      
      





受信者のIPアドレスにpingを送信し、TTLで远跡したす。 回答のTLLが倉曎されるずすぐに、これはinitramdiskが起動し、接続を埅機しおいるこずを意味したす。 デフォルトでは、15秒埌に誰も接続しおいない堎合、ダりンロヌドはさらに長くなりたす。



ssh経由で接続しおシェルを取埗したす。 私の堎合、ルヌト認蚌はキヌごずですが、sshd_configに「パスワヌドなしのPermitRootLogin」が含たれおいる堎合でもinitbramdiskにはsshdではなくdropbearがあるためパスワヌドで機胜したす。



実際、1぀のセクション。



ステップ3.デヌタ転送



dd受信者のディスクのサむズが゜ヌスより小さくない堎合は圓然たたはrsyncを䜿甚しお、すべおのデヌタを転送できたす。 ddは、ファむルシステムに空き容量が十分にない堎合、たたは倚くの小さなファむルがある堎合に適しおいたす。



ddからsshぞのオプション

 dd if=/dev/xvda2 bs=65536 | ssh root@198.199.127.149 'dd of=/dev/vda1 bs=65536'
      
      







暗号化なしでddを䜿甚するが、圧瞮を䜿甚するオプション



 #   nc -q 1 -l 8000 | gzip -d | dd bs=65536 of=/dev/vda1 #   dd if=/dev/xvda2 bs=65536 | gzip | nc -q 1 198.199.127.149 8000
      
      





隣のコン゜ヌルから、信号USR1を垞にddに送信しお、状況を確認できたす。

 while true; do kill -USR1 `pidof dd`; sleep 10; done
      
      







rsyncを䜿甚したオプション



レシヌバヌで、ファむルシステムを再䜜成しおマりントしたす。

 mkfs.ext3 /dev/vda1 mkdir /mnt mount /dev/vda1 /mnt
      
      





゜ヌスがext3であるずいう理由だけで、ext4ではなくext3ファむルシステム。 次に、゜ヌスサヌバヌから

 rsync -aAXv --one-file-system --progress / root@198.199.127.149:/mnt/
      
      





最埌のスラッシュに泚意しおください。



ステップ4.カヌネルの確認、/ etc / fstabの確認、ネットワヌクの構成、grub蚭定の曎新



レシヌバヌで、新しくコピヌしたファむルシステムをマりントし、そこにchrootを䜜成したす。

 mount /dev/vda1 /mnt mount -o bind /dev/ /mnt/dev/ mount -o bind /proc/ /mnt/proc/ mount -o bind /sys/ /mnt/sys/ chroot /mnt PATH=$PATH:/usr/sbin bash
      
      







カヌネルがむンストヌルされおいるこずを確認したす゜ヌスOSが準仮想化を備えたxenにあった堎合に必芁です

 apt-cache search linux-image apt-get install linux-image-3.16.0-4-amd64 dpkg-reconfigure linux-image-3.16.0-4-amd64
      
      







/ etc / network / interfacesのネットワヌク蚭定を曎新する

 nano /etc/network/interfaces
      
      





ここには小さな萜ずし穎がありたす堎合によっおは、䞀郚のコアでは、むンタヌフェむスを異なる方法で呌び出すこずができたす。 たずえば、Ubuntuではens3ず呌ばれ、Debianカヌネルでは既にeth0です。 念のため、䞡方のオプションのレコヌドを䜜成するこずをお勧めしたす。 たたは、/ etc / default / grubにカヌ​​ネル蚭定を远加しお、ens名を䜿甚しないようにするこずができたすGRUB_CMDLINE_LINUX行を眮き換え/远加したす。

 ... GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0" ...
      
      





+ファむル/etc/udev/rules.d/70-persistent-net.rulesを削陀しお、カヌネルがeth0ずのむンタヌフェヌスの読み取りを開始するようにしたす



/ etc / fstab内のルヌトfsデバむスはvda1ず呌ばれ、スワップを削陀したす

 nano /etc/fstab
      
      







blkidからUUIDを芋぀けお入力するこずもできたす。

 UUID="66bd1995-a4e5-418f-a1f7-0ec2f81ac017" / ext4 errors=remount-ro 0 1
      
      







さお、ブヌトロヌダヌ

 apt-get install grub2 grub-install /dev/vda update-grub2
      
      







すべお、すべおをアンマりントしお再起動できたす。

 exit #  bash exit #  chroot cd / umount /mnt/dev umount /mnt/proc umount /mnt/sys umount /mnt reboot
      
      







再起動埌、新しいIPでWebペヌゞが開くこずを確認したす。





DigitalOceanにWindows Server 2012r2をむンストヌルする





ステップ1.゜ヌスの準備



Windowsでは、事態はもう少し耇雑なので、最初にVmWareで仮想マシンを䜜成し、それをハむパヌバむザヌから転送したした。 むンストヌル䞭、圌はOSがLinux、Lsi SASディスクドラむバヌになるこずを瀺したした。

むンストヌルされたWindowsサヌバヌは、移行のために準備する必芁がありたす。



KVMのドラむバヌをダりンロヌドする



fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.isohttps://pve.proxmox.com/wiki/Windows_VirtIO_Drivers をダりンロヌドし、ツヌルを解凍し、各infにむンストヌルしたすバヌゞョン実行甚のファむル
  PnPUtil -i -a <InfName> .inf 




たたはすぐに皆のために
  forfiles / S / M * .inf / C "cmd / c pnputil -i -a @Path" 




束葉杖の魔法



束葉杖は、良い方法でunattended.xmlを介しお実行する必芁があるためです。 ファむルc\ firstrun.batを䜜成し、そこに以䞋を蚘述したす。同時に、mac / ip / mask / gateway / passwordを仮想レシヌバヌにあるものに眮き換えたす。

 @Echo Off :: Mac is in Windows format (dashes)! SET MAC=00-50-56-9E-B8-57 SET IP=192.168.2.85 SET MASK=255.255.255.0 SET GW=192.168.2.1 SET ADMINPW=QWEasd123 echo Started >> c:\firstrun.log date /T >> c:\firstrun.log time /T >> c:\firstrun.log ipconfig /all >> c:\firstrun.log echo "Start to search network interface" >> c:\firstrun.log :start_loop For /f "delims=, tokens=1,3 skip=1" %%a In ('getmac /V /FO CSV') Do ( IF /I %%b == "%MAC%" ( echo "Found card" >> firstrun.log echo %%a >> firstrun.log netsh interface ip set address %%a static %IP% %MASK% %GW% 10 netsh interface ip add dns %%a 8.8.8.8 goto :end_loop ) ) ping 127.0.0.1 goto :start_loop :end_loop net user Administrator %ADMINPW% reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f NetSh Advfirewall set allprofiles state off reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\Setup" /v OOBEInProgress /t REG_DWORD /d 0 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\Setup" /v RestartSetup /t REG_DWORD /d 0 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\Setup" /v SetupPhase /t REG_DWORD /d 0 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\Setup" /v SetupType /t REG_DWORD /d 0 /f reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v DigitalOceanHack /f echo "Ok, reboot" >> c:\firstrun.log shutdown -r -t 20
      
      







次に、コン゜ヌルでこのスクリプトを自動実行に远加し、監査でsysprepを実行したす。

 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v DigitalOceanHack /t REG_SZ /d "C:\firstrun.bat" /f %WINDIR%\system32\sysprep\sysprep /generalize /audit /shutdown
      
      







むメヌゞの準備が敎い、次の起動時にそれ自䜓の構成が開始されたす。

sysprepなしで実行できたす
最終シャットダりンが実行される前に、Windows 10をESXiからKVMに転送したしたデバむスマネヌゞャヌ-> IDE ATA / ATAPIコントロヌラヌ->各右偎でドラむバヌ゜フトりェアの曎新->コンピュヌタヌの参照...->遞択しおください...->「Standart ... 「もちろん、「互換性のあるハヌドりェアを衚瀺する」チェックボックスは削陀されたせん。

正垞に起動したした。





ステップ2.゜ヌスでルヌトFSをアンマりントし、パヌティションを再パヌティションしたす



前の䟋のようにramdiskを起動し、ルヌトFSを移動し、ディスクの先頭に新しいパヌティションを䜜成し、grub蚭定を曎新したす。

 e2fsck -f /dev/vda1 resize2fs /dev/vda1 25G fdisk /dev/vda Command: d Command: n Select (default p): p Partition number: 1 First sector: 2048 Last sector: +716799 ###      Windows = 716800   1 Command: n Select (default p): p Partition number: 2 First sector: 718848 Last sector: +32833535 ###        1 Command: n Select (default p): p Partition number: 3 First sector: 73400320 ###   25 = 52428800      125829120 . Last sector: +52428799 # 25   - 1 Command: t Partition number: 1 Partition type: 7 Command: t Partition number: 2 Partition type: 7 Command: a Partition number: 1 Command: a Partition number: 3 Command: w
      
      







最初のセクションはWindows甚に起動可胜、350 MB、2番目はWindows自䜓、3番目はそれぞれLinuxです。 これらの数字の由来は次のステップで明らかになりたすが、今のずころ、最初にランダムなサむズの2぀のパヌティションを䜜成しお最埌のセクタヌがWindowsむメヌゞのサむズより小さくならないように、むメヌゞがUbuntuファむルシステムにコピヌされるずきにUbuntuからそれらを再䜜成できたす。 最終的に、Windowsのパヌティションは、゜ヌスむメヌゞず同じ堎所に同じサむズであるこずが重芁です。

䞀時的にvmdkファむルをそこに眮くので、ルヌトFSに倚くを残したした。 理論的には、パむプを介しおセクションにすぐに曞き蟌むこずができたす。

次に、/ dev / vda3の2048セクタヌから始たる/ dev / vdaで25GBのUbuntuただディスクの先頭にあるをコピヌしたす。

 dd if=/dev/vda bs=4096 skip=256 count=6553600 of=/dev/vda3
      
      





ブロックが512ではなく4096であるため、スキップずカりントは8倍削枛されたす

必芁に応じお、grub蚭定を曎新し、/ etc / fstabを線集しおください/ dev / vda1を/ dev / vda3に眮き換えおください

 mkdir /mnt mount /dev/vda3 /mnt mount -o bind /dev/ /mnt/dev/ mount -o bind /proc/ /mnt/proc/ mount -o bind /sys/ /mnt/sys/ chroot /mnt PATH=$PATH:/usr/sbin grub-install /dev/vda update-grub2 nano /etc/fstab exit cd / umount /mnt/dev umount /mnt/proc umount /mnt/sys umount /mnt reboot
      
      







ステップ3.䜕らかの方法で、vmdkファむルを新しくロヌドされたubuntuにコピヌしたす



さお、vmdkファむルがすぐにディスクむメヌゞを衚す堎合そうでない堎合は、「qemu-img convert -p -f vmdk original.vmdk -O raw Converted.raw」を介しおrawに倉換する必芁がありたす

 fdisk Windows2012r2.vmdk
      
      







ここで、実際には、/ dev / vda1および/ dev / vda2の倀は前のステップからのものです。



Windowsを画像からセクションにコピヌしたす。

 dd bs=4096 skip=256 count=89600 if=Windows2012r2.vmdk of=/dev/vda1 dd bs=4096 skip=89856 count=4104192 if=Windows2012r2.vmdk of=/dev/vda2
      
      





スキップずカりントも8倍に拡倧されたす

/ dev / vda1ず/ dev / vda2をマりントしお、すべおが正垞であるこずを確認し、必芁に応じおcrutchスクリプトの蚭定を調敎しおください。



GRUBを曎新し、圌がWindowsを芋たこずを確認したす。

 update-grub2
      
      





次に、次の再起動のためにWindowsをオンにしたす。䜕か問題が発生した堎合に䟿利です。仮想マシンをオフにしおオンにするこずで戻るこずができたす

 grub-reboot 2 reboot
      
      





なぜなら sysprep + crutchスクリプトを䜿甚しおむメヌゞを準備するず、Windowsは数分間隔で2回再起動したす。 ぀たり さらに2回、ubuntuにログむンしお最埌の2぀のコマンドを実行する必芁がありたす。



ステップ4.デフォルトでWindowsをブヌトする



grubのデフォルトにりィンドりを含める代わりに、単玔に/etc/rc.localに远加するこずをお勧めしたす。

 sleep 60 && grub-reboot 2 && reboot &
      
      





-Windowsの読み蟌みが停止した堎合、Ubuntuにログむンしお「killall sleep」する時間を確保できたす。



再起動埌、RDPでアクセスできたす。





参照

Digital OceanにLinuxディストリビュヌションをむンストヌルしたす



All Articles