NVMe TCP üzerinden dizüstü bilgisayar klonlama
(copyninja.in)- Yeni dizüstü bilgisayarı sıfırdan yeniden kurmak yerine, mevcut dizüstü bilgisayarın tüm diski NVMe over TCP ile açığa çıkarılarak ağ üzerinden olduğu gibi kopyalandı
- Mevcut ortamda tam disk şifrelemesi ve 512GB disk kullanılıyordu; yeni dizüstü bilgisayarda ise 1TB NVMe bulunduğundan, kopyalama sonrasında bölüm, LUKS ve BTRFS genişletmesi gerekti
- Disk dışa aktarma için
systemd-storagetm.serviceyerine iki dizüstü bilgisayar da GRML rescue CD ile başlatıldı venvmet-tcpile/sys/kernel/config/nvmetüzerinden yapılandırıldı - Gerçek kopyalama
ddile yapıldı; yeni dizüstü bilgisayarda Ethernet portu olmadığından yalnızca WiFi kullanıldı ve 512GB kopyalama yaklaşık 7 saat 30 dakika sürdü, hız da yaklaşık 18~20MB/s düzeyindeydi - Kopyalama sonrasında
parted,growpart,cryptsetup resize, BTRFS resize adımlarıyla 1TB'ın tamamını kullanacak şekilde ayarlama yapıldı ve mevcut dizüstü bilgisayar ortamı neredeyse olduğu gibi devralınabildi
NVMe over TCP ile mevcut diski dışa aktarma
-
Yeni dizüstü bilgisayar kurulum sürecini tekrar etmemek için, bir iş arkadaşının önerisiyle mevcut dizüstü bilgisayarın tüm diskini kopyalama yöntemi seçildi
-
Başlamadan önce iki engel vardı
- Mevcut dizüstü bilgisayarı açıp yeni diski USB ile bağlayacak araç yoktu
- Mevcut dizüstü bilgisayarda tam disk şifrelemesi ve 512GB disk vardı; yeni dizüstü bilgisayarda ise 1TB NVMe bulunduğundan LUKS boyut ayarı gerekiyordu
-
İş akışı disk açığa çıkarma, kopyalama ve kapasite genişletme olmak üzere üç aşamadan oluşuyordu
- Mevcut dizüstü bilgisayarda
nvmet-tcpile disk dışa aktarıldı - Yeni dizüstü bilgisayarda bu disk kopyalandı
- Bölüm 1TB'ın tamamına genişletildi
- LUKS boyutu ayarlandı
- Son olarak BTRFS kök diskin boyutu ayarlandı
- Mevcut dizüstü bilgisayarda
-
systemd-storagetm.service yerine GRML kullanımı
- En kolay yöntem olarak systemd-storagetm.service kullanılabilirdi
rd.systemd.unit=storage-target-mode.targetbelirtilerekstorage-target-mode.targetile önyükleme yapıldığında çağrılabiliyordu- Ancak bu yöntem, dracut initrd imajına ağ servislerinin eklenmesini gerektiriyordu ve bu modda WiFi yapılandırması zahmetli olduğundan tercih edilmedi
- Bunun yerine iki dizüstü bilgisayar da GRML rescue CD ile başlatıldı; ardından mevcut dizüstü bilgisayarda Linux
nvmet-tcpmodülüyle NVMe disk dışa aktarıldı
modprobe nvmet-tcp cd /sys/kernel/config/nvmet mkdir ports/0 cd ports/0 echo "ipv4" > addr_adrfam echo 0.0.0.0 > addr_traaddr echo 4420 > addr_trsvcid echo tcp > addr_trtype cd /sys/kernel/config/nvmet/subsystems mkdir testnqn echo 1 >testnqn/allow_any_host mkdir testnqn/namespaces/1 cd testnqn # replace the device name with the disk you want to export echo "/dev/nvme0n1" > namespaces/1/device_path echo 1 > namespaces/1/enable ln -s "../../subsystems/testnqn" /sys/kernel/config/nvmet/ports/0/subsystems/testnqn- Bu yapılandırmayla hedef cihaz NVMe over TCP olarak açığa çıkarıldı
- Yeni dizüstü bilgisayarda dışa aktarılan cihaz keşfedilip bağlandı
nvme discover -t tcp -a <ip> -s 4420 nvme connectl-all -t tcp -a <> -s 4420- Sonrasında
nvme listile yeni dizüstü bilgisayara bağlanan cihaz doğrulanıp disk kopyalama işlemi yapılabildi
Disk kopyalama ve boyut ayarlama
-
ddile 512GB kopyalama- Kök disk kopyalama işlemi
ddkomutuyla yapıldı - Yeni dizüstü bilgisayarda Ethernet portu olmadığından yalnızca WiFi kullanıldı ve 512GB'ın tamamının kopyalanması yaklaşık 7 saat 30 dakika sürdü
- Aktarım hızı yaklaşık 18~20MB/s düzeyindeydi
- Diğer seçenekler arasında önce bölüm ve dosya sistemi oluşturup kök diski
rsyncile kopyalamak ya da BTRFS'nin kendi dosya sistemi aktarımını kullanmak da vardı
dd if=/dev/nvme2n1 of=/dev/nvme0n1 status=progress bs=40M - Kök disk kopyalama işlemi
-
Bölüm, LUKS ve BTRFS genişletme
parted, bölüm tablosunun disk boyutuyla uyuşmadığını algıladı ve düzeltme onayı alındıktan sonra bunu otomatik olarak düzeltti- İkinci bölümü genişletmek için
cloud-guest-utilskuruldu vegrowpartkullanıldı
growpart /dev/nvem0n1 p2- Sonraki adımda
cryptsetupile LUKS kapsayıcısının boyutu büyütüldü
cryptsetup luksOpen /dev/nvme0n1p2 ENC cryptsetup resize ENC- Diske yeniden önyükleme yapıldıktan sonra her şeyin düzgün çalıştığı doğrulandı ve oturum açıldıktan sonra BTRFS dosya sistemi boyutu ayarlandı
- BTRFS, boyut değiştirmek için sistemin bağlı durumda olmasını gerektirdiğinden live boot durumunda bu işlem yapılamadı
btfs fielsystem resize max /- Sonuç olarak yeni dizüstü bilgisayarda da mevcut dizüstü bilgisayarı kullanmaya devam ediyormuş gibi bir ortam elde edildi
- Normalde yeni bir dizüstü bilgisayara tamamen alışmak yaklaşık 1~2 hafta sürse de bu yöntemle bu süre azaltıldı
- Ek olarak NVMe over TCP ile disk dışa aktarma yönteminin öğrenilmiş olması da ayrı bir kazanım oldu
1 yorum
Hacker News yorumları
Yazarın senaryosunda sonuçta
dd(1)ile yalnızca seri blok kopyalama yapıldığı için NVMe/TCP kullanmanın pek bir avantajı yok. Karmaşık komutlar basit birnetcatile değiştirilebilirHedef dizüstü:
$ nc -l -p 1234 | dd of=/dev/nvme0nX bs=1MKaynak dizüstü:
$ nc x.x.x.x 1234Hedef taraftaki
dd, yazmaları tamponlayarak daha hızlı ve verimli hâle getirmek için. Kaynak/hedefegzip/gunzipeklerseniz, disk dolu değilse ve çok sayıda 0 bloğu varsa çok daha hızlanır. Şahsen ağ üzerinden PC imajı alırken en sevdiğim yöntem ve bunu birçok kez yaptımGigE'de sık sık darboğaz sıkıştırma olduğundan
gzipiçin--fastgeçirmek iyi olur; daha iyisi,gzip/gunzipyerine lz4/unlz4 kullanırsanız daha hızlıdır. Eskiden 1TB NVMe'li yeni bir Windows dizüstünün imajını GigE üzerinden aldığımda yaklaşık 20 dakika sürmüştü; boş alan neredeyse 0'a yakın sıkıştırıldığı için ortaya çıkan imaj 20GB idi. Genelde o lz4 imajını yedekleyip birkaç yıl sonra dizüstünü bağışlarkenunlz4 | ddile geri yüklüyorum; çok pratik oluyorAncak Linux çekirdek modülü
nvme-tcpden haberim yoktu; insan her gün yeni bir şey öğreniyor. Bu,ddile ham erişim için olmaktan çok, uzak NVMe üzerinde dosya sistemi bağlamakta daha kullanışlı görünüyorEk olarak Linux'ta maksimum pipe tamponu boyutu 64kB olduğundan
dd bs=Xargümanının teknik olarak bundan büyük olmasına gerek yok. Yine debs=1Mzararlı değil; 64kB okumaları 1MB olana kadar toplar ve ileride pipe boyutu büyürse buna da hazırlıklı olur. Bazınetcatsürümlerinde giriş/çıkış blok boyutu seçenekleri var, bu yüzdendd bs=Xgerekmez; ama kurtarma disklerindekinetcatgenelde bu seçeneklere sahip olmayan sürümdürddyerinepvkullanırsanız uygun blok boyutunu belirtme derdi olmaz ve ilerleme grafiği de güzel görünürtestdiskile bölüm tablosunu yeniden oluşturmamız gerekiyordu ama ondan önce hasarlı disklere dokunmak istemediğimiz için bir kurtarma flash diski,netcatve disklerle yaklaşık 40TB kopyaladıkBazı sunucularda fiziksel RAID yuvalarının hepsi doluydu, bu yüzden yedek disk yuvası da kullanamıyorduk; kabaca
dd if=/dev/sdc bs=xxx | gzip | nc -l -p 8888ve karşı tarafta bunun ters yönlü komutunu kullandık. Şaşırtıcı derecede iyi çalıştı. Dikkat edilmesi gereken bir nokta,dd bskombinasyonunu sektör boyutuna göre denemekti; uygun boyutddaktarım hızını ciddi etkiliyorduddkullanımı bozulmaya yol açabilir. Blokların kesilmemesi içiniflag=fullblockgerekir; körü körüne bir alışkanlık olma riski olsa daconv=syncde zararlı değildir. Şahsen sadecenc -l -p 1234 > /dev/nvme0nXkullanmayı tercih ederimPipeline'a
pveklerseniz tahmini bitiş zamanını görebilirsiniz, ama performansı biraz etkileyebilirAWS/Annapurna/Nitro/Lightbits'e Linux'a NVMe-over-TCP getirdikleri için teşekkürler
https://www.techtarget.com/searchstorage/news/252459311/Ligh...
“NVM Express konsorsiyumu, Kasım 2018'de NVMe/TCP'yi bağlayıcı taşıma katmanı olarak onayladı. Bu standart, başlangıçta Lightbits mühendislik ekibinin NVM Express'e sunduğu kod tabanından gelişti.”
https://www.lightbitslabs.com/blog/linux-distributions-nvme-...
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
Şuna kıyasla çok daha zahmetli görünüyor:
nbdkit file /dev/nvme0n1,nbdcopy nbd://otherlaptop localfilenbdcopysparse dosyaları işleyebilir, bağlantı ve thread sayılarını çekirdek sayısına göre ayarlayabilir, çıkmadan önce zorunlu flush yapabilir ve ilerleme çubuğunu da açabilir. Şifrelenmemiş bir sürücüyse TLS'yi de desteklerYakın zamanda yeni bir dizüstüne xubuntu kurmam gerekti. Eskiden klonlardım ama bu kez bazı ayarları baştan düzenlemek istedim.
USB-C kablosuyla 10Gb/s aktarım yapabilmek gerçekten işe yaradı. Çünkü diğer tek seçenek WiFi idi.
Bilgisayarları birbirine takınca geçici bir ağ oluşuyor ve dosyaları sadece
rsyncile geçirmek yeterli oluyor. Görünüşe göre bağlantı doyguna ulaşıyordu, bu yüzden başka bir protokol kullanmanın pek anlamı yok gibi geldi. Elbette yeni bir şey öğrenmek güzeldir ama belki de dizüstü klonladığınız anda değil.Aktarımın kendisi inanılmaz hızlıydı; birkaç dakika içinde 1TB taşıdım. Bu kez şifreleme kullanmadığım için çok daha basitti.
Neden btrfs'yi ağ üzerinden pipe etmediğini anlamıyorum. Önce bir btrfs snapshot'ı oluşturup
btrfs send => nc => network => nc => btrfs receiveyaparsanız yalnızca kullanılan bloklar aktarılır.btrfs send/receive'i SSH üzerinden sürekli kullanıyorum ve çok iyi çalışıyor. GRML canlı oturumunda SSH sunucusunu kolayca ayağa kaldırmak da mümkün olurdu.Yalnız bir dikkat noktası var. btrfs'de snapshot'ları özyinelemeli göndermek mümkün değil; çok sayıda özyinelemeli snapshot varsa aynı yapıyı yeni diske yansıtmak görece zorlaşıyor. Docker/LXD/Incus'ta bu yaşanabilir. btrfs'yi seviyorum ama özyinelemeli send/receive konusunda ZFS daha iyi.
Yakın zamanda WiFi üzerinden yaklaşık 200GB dosya kopyalamam gerekti. Bağlantı koparsa baştan başlamamak ve kayıp olmaması için
rsynckullandım ama en az 6 saat sürdü. Daha iyi bir yöntem var mıydı merak ediyorum.Ayrıca
ddyönteminin ne tür garantiler verdiğini de merak ediyorum. Sonuçtaki blok aygıtının md5'ini karşılaştırmak mı gerekir?WiFi'de performans darboğazı yaratabilecek çok daha fazla neden var. Cihazlardan sadece birini bile kabloyla yönlendiriciye bağlayıp diğerini kablosuz bırakmak bile epey yardımcı olur.
rsync'in tek seferde yalnızca bir dosya aktarması büyük olasılıkla darboğaz olmuş olabilir.xargs/parallelile dosya listesini bölüp birden çokrsyncörneği çalıştırabilir ya da kendi içinde paralel aktarım destekleyenrclonegibi bir şey kullanabilirsin.-zile sıkıştırma yapıp yapmadığını merak ediyorum. Ethernet kullanılabilseydi çoğu cihazda 100MB/s'ye yaklaşır ve yaklaşık 35 dakika sürerdi.rsync'in aktarım yöntemi SSH ise darboğaz çoğu zaman o olur. OpenSSH'nin tarihsel olarak tuhaf performans sınırlamaları vardı ve bunları aşmak için az bilinen yamaların gerektiği zamanlar oldu. CPU darboğaz olmuyorsa sıkıştırmayı açmak da yardımcı olur.“Bilgisayar ağlarında çakışma önlemeli taşıyıcı algılamalı çoklu erişim (CSMA/CA), taşıyıcı algılamayı kullanan ancak kanalı yalnızca ‘boşta’ olarak algıladıktan sonra iletime başlayarak çakışmaları önlemeye çalışan bir ağ çoklu erişim yöntemidir. İletim sırasında düğüm paket verisini bütünüyle gönderir.
Bu, kablosuz vericinin paket iletimi sırasında alıcıyı duyarsızlaştırıp devre dışı bırakması nedeniyle çakışma algılamalı CSMA/CD'nin kullanılamadığı kablosuz ağlarda özellikle önemlidir.
CSMA/CA, gizli düğüm problemi nedeniyle düşük güvenilirliğe sahiptir.
CSMA/CA, veri bağlantı katmanında çalışan bir protokoldür.”
https://en.wikipedia.org/wiki/Carrier-sense_multiple_access_...
Bu yaklaşımın avantajları vardır ama eskiden dizüstü taşırken iki tarafta da kurulum programını açıp
ddilenc'yi birleştirirdim. Hatırladığım kadarıyla büyük null alanlarını daha hızlı aktarmak için gzip de eklemiştim.Yeni dizüstünde Ethernet portu yoksa, benim hack'li yöntemim sıkıştırma sayesinde biraz daha hızlı olabilirdi. Çünkü ağ hızı, hızlı bir bağlantıda sıkıştırmanın getireceği sınıra yaklaşamayacak kadar düşük olurdu.
Sadece Clonezilla kullanmak yeterli değil mi? Yalnızca gerçek veri bloklarını kopyalar ve bölümleri otomatik yeniden boyutlandırabilir. Ben hep öyle yapıyorum.
Tabii genelde dizüstünden NVMe diski çıkarıp yüksek hızlı bir dock'a takıyorum.
Henüz tamamen güvenip kendi hâline bırakılacak düzeyde değil. Yedekleme, yedekleme artı geri yükleme ile aynı şey değildir; bu yüzden deneme yapmak önerilir. Clonezilla da kaynak diskten çok farklı bir diskte bölümleri yeniden oluştururken sorun çıkarabilir.
Masaüstü ya da dizüstüne işletim sistemini gerçekten “kurmayalı” onlarca yıl oldu; hep dosyaları kopyalayıp yalnızca gereken yerleri ayarladım. Genelde bu fırsatı dosya sistemi türü veya blok boyutu gibi parametreleri, şifrelemeyi vb. güncellemek için yeni bir dosya sistemi oluşturup dosyaları
rsyncile taşımak üzere kullanırım.Yine de önceden plan yapan biriyseniz, yalnızca ayarları kopyalayıp geri kalanını otomatik yeniden kuran NixOS gibi daha bildirime dayalı bir yaklaşım daha iyi olabilir.
Cihazları arada AP olmadan WiFi ile doğrudan bağlamak aktarım hızını iki katına çıkarabilir. Bu durumda denemeye değer gibiymiş.