- Alih-alih menyiapkan laptop baru dari awal lagi, seluruh disk laptop lama diekspos melalui NVMe over TCP lalu dikloning apa adanya lewat jaringan
- Lingkungan lama menggunakan enkripsi seluruh disk dan disk 512GB, sementara laptop baru memakai NVMe 1TB sehingga setelah kloning perlu memperluas partisi, LUKS, dan BTRFS
- Untuk mengekspor disk, alih-alih
systemd-storagetm.service, kedua laptop di-boot dengan GRML rescue CD lalu dikonfigurasi menggunakannvmet-tcpdan/sys/kernel/config/nvmet - Penyalinan aktual dilakukan dengan
dd, dan karena laptop baru tidak memiliki port Ethernet sehingga hanya menggunakan WiFi, hasilnya kloning 512GB memakan waktu sekitar 7 jam 30 menit dengan kecepatan sekitar 18~20MB/s - Setelah kloning, dilakukan penyesuaian agar seluruh 1TB bisa digunakan melalui
parted,growpart,cryptsetup resize, dan resize BTRFS, sehingga lingkungan laptop lama bisa diteruskan hampir apa adanya
Mengekspor disk lama dengan NVMe over TCP
-
Untuk menghindari mengulang prosedur penyiapan laptop baru, dipilih metode menyalin seluruh disk laptop lama sesuai saran rekan kerja
-
Sebelum mulai, ada dua kendala
- Tidak ada alat untuk membuka laptop lama dan menghubungkan disk baru lewat USB
- Laptop lama menggunakan enkripsi seluruh disk dan disk 512GB, sedangkan laptop baru memakai NVMe 1TB sehingga perlu penyesuaian ukuran LUKS
-
Alur kerjanya terdiri dari tiga tahap: mengekspos disk, menyalin, dan memperluas kapasitas
- Mengekspor disk dari laptop lama dengan
nvmet-tcp - Menyalin disk tersebut di laptop baru
- Memperluas partisi ke seluruh kapasitas 1TB
- Menyesuaikan ukuran LUKS
- Terakhir, menyesuaikan ukuran disk root BTRFS
- Mengekspor disk dari laptop lama dengan
-
Menggunakan GRML alih-alih systemd-storagetm.service
- Cara termudah sebenarnya adalah menggunakan systemd-storagetm.service
- Ini bisa dipanggil dengan boot ke
storage-target-mode.targetmenggunakanrd.systemd.unit=storage-target-mode.target - Namun, pendekatan ini mengharuskan layanan jaringan disertakan dalam image initrd dracut, dan dalam mode tersebut konfigurasi WiFi cukup merepotkan, sehingga tidak dipilih
- Sebagai gantinya, kedua laptop di-boot dengan GRML rescue CD, lalu disk NVMe dari laptop lama diekspor menggunakan modul Linux
nvmet-tcp
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- Dengan konfigurasi ini, perangkat target diekspos melalui NVMe over TCP
- Di laptop baru, perangkat yang diekspor kemudian ditemukan dan dihubungkan
nvme discover -t tcp -a <ip> -s 4420 nvme connectl-all -t tcp -a <> -s 4420- Setelah itu, perangkat yang terhubung di laptop baru bisa dicek lewat
nvme list, lalu penyalinan disk dapat dilakukan
Penyalinan disk dan penyesuaian ukuran
-
Menyalin 512GB dengan
dd- Penyalinan disk root dilakukan dengan perintah
dd - Karena laptop baru tidak memiliki port Ethernet dan hanya menggunakan WiFi, penyalinan penuh 512GB memakan waktu sekitar 7 jam 30 menit
- Kecepatan transfernya berada di kisaran 18~20MB/s
- Alternatif lain adalah membuat partisi dan file system awal lalu menyalin disk root dengan
rsync, atau menggunakan transfer file system bawaan BTRFS
dd if=/dev/nvme2n1 of=/dev/nvme0n1 status=progress bs=40M - Penyalinan disk root dilakukan dengan perintah
-
Memperluas partisi, LUKS, dan BTRFS
partedmendeteksi bahwa tabel partisi tidak sesuai dengan ukuran disk, lalu setelah konfirmasi otomatis memperbaikinya- Untuk memperluas partisi kedua,
cloud-guest-utilsdipasang dangrowpartdigunakan
growpart /dev/nvem0n1 p2- Pada langkah berikutnya, ukuran kontainer LUKS diperbesar dengan
cryptsetup
cryptsetup luksOpen /dev/nvme0n1p2 ENC cryptsetup resize ENC- Setelah reboot ke disk dan dipastikan berjalan normal, ukuran file system BTRFS disesuaikan setelah login
- BTRFS harus dalam keadaan ter-mount untuk resize, sehingga tidak bisa dicoba saat boot live
btfs fielsystem resize max /- Hasil akhirnya, laptop baru memberikan lingkungan yang terasa seperti tetap menggunakan laptop lama
- Biasanya butuh sekitar 1~2 minggu untuk benar-benar beradaptasi dengan laptop baru, tetapi cara ini memangkas waktu tersebut
- Bonusnya, ada juga pembelajaran tentang cara mengekspor disk lewat NVMe over TCP
1 komentar
Komentar Hacker News
Dalam skenario penulis, pada akhirnya yang dilakukan hanya penyalinan blok serial dengan
dd(1), jadi hampir tidak ada keuntungan memakai NVMe/TCP. Perintah yang rumit bisa diganti dengannetcatyang sederhanaLaptop tujuan:
$ nc -l -p 1234 | dd of=/dev/nvme0nX bs=1MLaptop sumber:
$ nc x.x.x.x 1234dddi sisi tujuan dipakai untuk membuffer penulisan agar lebih cepat dan efisien. Jika menambahkangzip/gunzipdi sumber/tujuan, proses bisa jauh lebih cepat saat disk tidak penuh dan ada banyak blok 0. Ini secara pribadi adalah cara favorit saya saat membuat image PC lewat jaringan, dan saya sudah beberapa kali melakukannyaDi GigE, kompresi sering menjadi bottleneck, jadi sebaiknya berikan
--fastkegzip, atau lebih baik lagi pakai lz4/unlz4 alih-alihgzip/gunzipagar lebih cepat. Dulu saya pernah meng-image laptop Windows baru dengan NVMe 1TB lewat GigE, butuh sekitar 20 menit, dan karena ruang kosong terkompresi hampir menjadi 0, image hasilnya hanya 20GB. Biasanya saya menyimpan backup image lz4 itu, lalu beberapa tahun kemudian saat mendonasikan laptop, cukup pulihkan denganunlz4 | dd, sangat praktisNamun saya belum tahu soal modul kernel Linux
nvme-tcp, dan tiap hari memang selalu ada hal baru yang dipelajari. Ini tampaknya lebih berguna untuk me-mount filesystem di atas NVMe jarak jauh daripada untuk akses mentah denganddSebagai tambahan, ukuran maksimum buffer pipe di Linux adalah 64kB, jadi secara teknis argumen
dd bs=Xtidak perlu lebih besar dari itu. Meski begitu,bs=1Mjuga tidak merugikan dan akan menggabungkan pembacaan 64kB sampai menjadi 1MB, sekaligus antisipasi jika ukuran pipe nanti membesar. Beberapa versinetcatpunya opsi ukuran blok I/O sehinggadd bs=Xtidak diperlukan, tetapinetcatdi disk pemulihan biasanya versi yang tidak punya opsi itupvdi kedua sisi alih-alihdd, tidak perlu khawatir menentukan ukuran blok yang tepat, dan grafik progresnya juga enak dilihattestdisk, tetapi sebelumnya kami tidak ingin menyentuh disk yang rusak, jadi kami menyalin sekitar 40TB dengan flash disk pemulihan,netcat, dan driveBeberapa server slot RAID fisiknya sudah penuh, jadi tidak bisa memakai slot disk cadangan, dan kami kira-kira menggunakan
dd if=/dev/sdc bs=xxx | gzip | nc -l -p 8888beserta perintah kebalikannya di sisi lain. Hasilnya bekerja cukup baik. Satu hal yang perlu diperhatikan adalah mencoba kombinasidd bsagar sesuai dengan ukuran sektor, karena ukuran yang tepat sangat memengaruhi throughputddddseperti ini bisa menyebabkan kerusakan. Diperlukaniflag=fullblockagar blok tidak terpotong, dan walaupun mungkin hanya kebiasaan yang diikuti mentah-mentah,conv=syncjuga tidak merugikan. Secara pribadi saya lebih memilihnc -l -p 1234 > /dev/nvme0nXJika menambahkan
pvke pipeline, kita bisa melihat perkiraan waktu selesai, meskipun mungkin ada sedikit dampak pada performaTerima kasih kepada AWS/Annapurna/Nitro/Lightbits karena telah membawa NVMe-over-TCP ke Linux
https://www.techtarget.com/searchstorage/news/252459311/Ligh...
“Konsorsium NVM Express meratifikasi NVMe/TCP sebagai binding transport layer pada November 2018. Standar ini berkembang dari basis kode yang awalnya diajukan ke NVM Express oleh tim engineering Lightbits.”
https://www.lightbitslabs.com/blog/linux-distributions-nvme-...
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
Dibandingkan ini, yang di bawah tampak jauh lebih merepotkan:
nbdkit file /dev/nvme0n1,nbdcopy nbd://otherlaptop localfilenbdcopybisa menangani sparse file, jumlah koneksi dan thread bisa disesuaikan dengan jumlah core, bisa memaksa flush sebelum selesai, dan progress bar juga bisa diaktifkan. Untuk drive yang tidak terenkripsi, TLS juga didukungBaru-baru ini perlu memasang xubuntu di laptop baru. Dulu biasanya dikloning, tetapi kali ini ingin merapikan ulang beberapa pengaturan dari awal
Sangat terbantu karena bisa transfer 10Gb/s lewat kabel USB-C. Pilihan lain satu-satunya cuma WiFi
Tinggal colokkan kedua komputer satu sama lain, jaringan sementara akan terbentuk, lalu kirim saja dengan
rsync. Dari tampilannya, link-nya sudah jenuh, jadi memakai protokol lain tampaknya tidak akan banyak berarti. Tentu belajar hal baru itu bagus, tetapi mungkin bukan pada saat sedang mengkloning laptopTransfernya sendiri sangat cepat, 1TB pindah dalam beberapa menit. Kali ini saya tidak memakai enkripsi, jadi jauh lebih sederhana
Saya tidak paham kenapa tidak me-pipe btrfs lewat jaringan. Buat dulu snapshot btrfs, lalu
btrfs send => nc => network => nc => btrfs receive, maka hanya blok yang terpakai yang akan ditransferbtrfs send/receivelewat SSH dan hasilnya sangat bagus. Mestinya juga mudah menjalankan server SSH dari sesi live GRMLNamun ada satu hal yang perlu diperhatikan. Di btrfs, snapshot tidak bisa dikirim secara rekursif, jadi kalau ada banyak snapshot rekursif, cukup sulit untuk mencerminkan struktur yang sama ke disk baru. Ini bisa terjadi di Docker/LXD/Incus. Saya suka btrfs, tetapi untuk send/receive rekursif, ZFS memang lebih baik
Baru-baru ini saya harus menyalin sekitar file 200GB lewat WiFi. Agar tidak harus mengulang dari awal kalau koneksi gagal, dan supaya tidak ada kehilangan data, saya memakai
rsync, tetapi tetap butuh setidaknya 6 jam. Penasaran apakah ada cara yang lebih baikDan saya juga ingin tahu jaminan apa yang diberikan metode
dd. Apakah perlu membandingkan md5 perangkat blok hasilnya?WiFi punya jauh lebih banyak potensi sumber bottleneck performa. Bahkan jika hanya satu perangkat saja yang dihubungkan ke router dengan kabel, sementara yang lain tetap nirkabel, itu sudah cukup membantu
rsyncyang mentransfer satu file pada satu waktu. Anda bisa membagi daftar file denganxargs/parallellalu menjalankan beberapa instancersync, atau memakai sesuatu sepertircloneyang mendukung transfer paralel secara bawaan-zuntuk kompresi. Jika bisa memakai Ethernet, pada kebanyakan perangkat mestinya bisa mendekati 100MB/s, jadi sekitar 35 menitrsync-nya lewat SSH, itu sering menjadi bottleneck. Secara historis OpenSSH pernah punya batasan performa yang aneh, dan untuk mengakalinya dulu bahkan sempat perlu patch yang tidak begitu dikenal. Jika CPU bukan bottleneck, mengaktifkan kompresi juga bisa membantu“Dalam jaringan komputer, carrier-sense multiple access with collision avoidance (CSMA/CA) adalah metode akses ganda jaringan yang menggunakan carrier sensing, tetapi node baru mulai mentransmisikan setelah kanal terdeteksi ‘idle’, dalam upaya menghindari tabrakan. Saat mentransmisikan, node mengirim seluruh data paketnya
Ini sangat penting khususnya untuk jaringan nirkabel, karena pemancar nirkabel tidak dapat mendeteksi tabrakan saat sedang mengirim paket, karena penerimanya dibuat tidak peka dan dimatikan selama transmisi paket
CSMA/CA tidak dapat diandalkan karena masalah hidden node
CSMA/CA adalah protokol yang bekerja di lapisan data link.”
https://en.wikipedia.org/wiki/Carrier-sense_multiple_access_...
Pendekatan ini punya kelebihannya, tetapi dulu saat memindahkan laptop saya menjalankan installer di kedua sisi lalu menggabungkan
dddannc. Kalau tidak salah, saya juga menambahkan gzip agar area nol yang besar bisa ditransfer lebih cepatJika laptop baru tidak punya port Ethernet, cara saya yang agak hacky mungkin sedikit lebih cepat berkat kompresi. Lagi pula, pada link jaringan yang cepat, saya tidak akan mendekati batas yang ditambahkan oleh kompresi
Kenapa tidak pakai saja Clonezilla? Ia hanya menyalin blok data yang benar-benar terpakai dan juga bisa menyesuaikan ukuran partisi secara otomatis. Saya selalu begitu
Tentu saja, biasanya saya mencabut disk NVMe dari laptop lalu memasangnya ke dock berkecepatan tinggi
Saya masih belum cukup percaya untuk membiarkannya tanpa pengawasan. Backup tidak sama dengan gabungan backup dan restore, jadi pengujian tetap disarankan. Clonezilla juga bisa bermasalah saat membuat ulang partisi ke disk yang sangat berbeda dari sumbernya
Sudah puluhan tahun saya tidak benar-benar “menginstal” sistem operasi di desktop atau laptop, dan selalu menyalin file lalu hanya menyesuaikan bagian yang perlu. Biasanya saya memanfaatkan kesempatan ini untuk membuat filesystem baru sambil memperbarui parameter seperti jenis filesystem, ukuran blok, enkripsi, dan semacamnya, lalu memindahkan file dengan
rsyncMeski begitu, kalau Anda tipe yang suka merencanakan dari awal, pendekatan yang lebih deklaratif seperti NixOS, yang hanya menyalin konfigurasi dan menginstal ulang sisanya secara otomatis, mungkin lebih baik
Jika perangkat-perangkat dihubungkan langsung lewat WiFi tanpa AP perantara, kecepatan transfer bisa meningkat dua kali lipat. Dalam situasi ini tampaknya cukup layak dicoba