NVMe TCP का उपयोग करके लैपटॉप क्लोन करना
- हाल ही में एक नया लैपटॉप खरीदा और उसे इस्तेमाल के लिए सेटअप करना था।
- पहले से ज्ञात चरणों को फिर से दोहराने का कोई उत्साह नहीं था।
- एक सहकर्मी के सुझाव पर, पुराने डिस्क को नए लैपटॉप में कॉपी करने के तरीके पर विचार किया।
क्लोनिंग प्रक्रिया को लेकर सवाल
- पुराने लैपटॉप को खोलकर नए डिस्क को USB से जोड़ने के लिए कोई टूल नहीं था।
- Full-disk encryption का उपयोग किया जा रहा था, और पुराने लैपटॉप में 512GB जबकि नए लैपटॉप में 1TB NVME था।
- LUKS partition का आकार बदलने का अनुभव नहीं था।
सहकर्मी का सुझाव
- NVME over TCP का उपयोग करके डिस्क को नेटवर्क के ज़रिए share करने और पूरी डिस्क की कॉपी करने का सुझाव दिया गया।
- सुझाए गए चरण इस प्रकार थे:
- पुराने लैपटॉप पर
nvmet-tcp का उपयोग करके डिस्क export करना।
- नए लैपटॉप पर डिस्क कॉपी करना।
- partition का आकार बदलकर पूरे 1TB का उपयोग करना।
- LUKS का आकार बदलना।
- अंत में BTRFS root disk का आकार बदलना।
NVME TCP के ज़रिए डिस्क export करना
systemd-storagetm.service का उपयोग सबसे आसान तरीका बताया गया।
- इसके बजाय, दोनों लैपटॉप को GRML rescue CD से boot किया गया और
nvmet-tcp module का उपयोग करके NVME डिस्क export करने के चरण पूरे किए गए।
डिस्क कॉपी
dd command का उपयोग करके root disk को नए लैपटॉप में कॉपी किया गया।
- नए लैपटॉप में Ethernet port नहीं था, इसलिए केवल Wi-Fi का उपयोग करना पड़ा, और पूरे 512GB को कॉपी करने में लगभग 7 घंटे 30 मिनट लगे।
- कॉपी की गति लगभग 18-20MB/s थी।
partition और LUKS container का आकार बदलना
parted चलाने पर उसने पाया कि partition table डिस्क के आकार से मेल नहीं खा रही थी और उसे ठीक करने के लिए कहा।
cloud-guest-utils install करके growpart का उपयोग किया गया ताकि partition को 1TB तक बढ़ाया जा सके।
cryptsetup-resize का उपयोग करके LUKS container का आकार बढ़ाया गया।
- सिस्टम में login करने के बाद BTRFS file system का आकार बदला गया।
निष्कर्ष
- इस प्रक्रिया का एकमात्र लाभ यह था कि नया लैपटॉप इस्तेमाल करते हुए भी वही अनुभव मिलता है जैसा पुराने लैपटॉप का था।
- आम तौर पर नए लैपटॉप को सेटअप करने में 1-2 हफ्ते लगते हैं, लेकिन इस मामले में वह समय बच गया।
- एक अतिरिक्त लाभ यह भी रहा कि NVME over TCP का उपयोग करके डिस्क export करना सीखा।
GN⁺ की राय
- NVME over TCP के ज़रिए लैपटॉप क्लोन करना मौजूदा सिस्टम environment को नए hardware पर तेज़ी से स्थानांतरित करने का एक प्रभावी तरीका दिखाता है।
- यह तकनीक system administrator और developers के लिए समय बचाने और setup errors को कम करने के उपाय के रूप में दिलचस्प हो सकती है।
- हालांकि, यह network speed पर बहुत अधिक निर्भर करती है, और अगर केवल Wi-Fi उपलब्ध हो तो इसमें काफ़ी समय लग सकता है, जो एक ध्यान देने योग्य कमी है।
- Clonezilla या Acronis जैसे टूल समान क्षमताएँ देते हैं, लेकिन NVME over TCP का खास फ़ायदा नेटवर्क के ज़रिए सीधा disk access है।
- इस तकनीक को अपनाते समय network configuration, encrypted disks को संभालना, और file system resizing जैसी चीज़ों की पर्याप्त समझ होना ज़रूरी है।
1 टिप्पणियां
Hacker News राय
लेखक के परिदृश्य में NVMe/TCP इस्तेमाल करने का कोई फ़ायदा नहीं है। क्योंकि वह बस
ddका उपयोग करके serial block copy कर रहा है, इसलिए concurrent I/O का लाभ नहीं मिल पाता। जटिल commands को सरलnetcatसे बदला जा सकता है.$ nc -l -p 1234 | dd of=/dev/nvme0nX bs=1Mइस्तेमाल करें.$ nc x.x.x.x 1234 </dev/nvme0nXइस्तेमाल करें.ddwrite operation को buffer करता है, जिससे यह तेज़ और अधिक efficient बनता है। source/destination परgzip/gunzipजोड़ने से, अगर disk पूरी भरी न हो, तो पूरा काम काफ़ी तेज़ हो जाता है। network के ज़रिए PC image बनाने का यह मेरा पसंदीदा तरीका है।gzipको--fastoption देना, या इसे तेज़lz4/unlz4से बदलना अच्छा है। हाल ही में 1TB NVMe वाले एक नए Windows laptop की imaging करते समय इसका उपयोग किया था; GigE पर इसमें लगभग 20 मिनट लगे और result image 20GB की थी। आम तौर पर मैं इसlz4image को backup रखता हूँ और कुछ साल बाद laptop दान करते समयunlz4 | ddसे restore करता हूँ। यह बहुत सुविधाजनक है.nvme-tcpके बारे में नहीं जानता था, लेकिन हर दिन कुछ नया सीखता हूँ। इस module की उपयोगिताddसे raw access करने से ज़्यादा remote NVMe पर file system mount करने में है.dd bs=Xargument का उससे बड़ा होना ज़रूरी नहीं है। फिर भीbs=1Mनुकसान नहीं करता (यह 64kB reads को 1MB होने तक buffer करता है) और अगर future में pipe size बढ़े तो तब भी उपयोगी रहेगा।netcatके कुछ versions में input और output block size नियंत्रित करने के options होते हैं, जिससेdd bs=Xकी ज़रूरत कम हो जाती है, लेकिन rescue disks में आम तौर पर ऐसे options के बिना वालाnetcatbinary इस्तेमाल होता है.nbdkitऔरnbdcopyका उपयोग करना काफ़ी सरल है.nbdkit file /dev/nvme0n1nbdcopy nbd://otherlaptop localfileजब नया laptop सेट up करना था, तब USB-C cable का उपयोग करके 10Gb/s पर transfer करना उपयोगी रहा। दूसरा विकल्प सिर्फ़ WiFi था.
rsyncका उपयोग करके transfer किया जा सकता है। link saturated लग रहा था, इसलिए कोई दूसरा protocol इस्तेमाल करना बेकार लगता है.हाल ही में WiFi के ज़रिए लगभग 200GB files copy करनी पड़ीं। connection fail होने पर शुरू से फिर शुरू न करना पड़े, इसलिए
rsyncइस्तेमाल किया, लेकिन फिर भी कम से कम 6 घंटे लगे। इससे बेहतर तरीका क्या हो सकता है, यह जानना चाहता हूँ.ddmethod से क्या guarantees मिलती हैं? क्या result block-level device का md5 compare करना चाहिए?समझ नहीं आता कि लेखक ने network के ऊपर
btrfspipe क्यों नहीं किया। पहलेbtrfssnapshot बनाएँ, फिरbtrfs send => nc => network => nc => btrfs receiveके ज़रिए सिर्फ़ इस्तेमाल में आए blocks transfer करें.पहले जब laptop transfer किए थे, तब दोनों तरफ
ddऔरncको जोड़ने वाला installer चलाया था। जहाँ तक याद है, transfer तेज़ करने के लिएgzipभी जोड़ा था.Clonezillaका उपयोग करने से सिर्फ़ actual data blocks copy होते हैं और partitions अपने आप adjust हो सकते हैं। मैं हमेशा यही तरीका इस्तेमाल करता हूँ.दशकों से मैंने वास्तव में OS को "install" नहीं किया है; मैं files copy करता हूँ और ज़रूरत के हिसाब से adjust कर लेता हूँ। आम तौर पर इसे नया file system बनाकर file system type/parameters (जैसे block size), encryption आदि update करने और files को
rsyncसे transfer करने के अवसर के रूप में उपयोग करता हूँ.NixOSजैसा ज़्यादा declarative approach बेहतर हो सकता है। यहाँ आप सिर्फ़ configuration copy करके बाकी सब कुछ अपने आप फिर से install कर सकते हैं.FDT(Fast Data Transfer) का कोई ज़िक्र नहीं है.
-limit <rate>option से transfer speed को तय दर तक सीमित किया जा सकता है। suffix के रूप में K(KiloBytes/s), M(MegaBytes/s), G(GigaBytes/s) इस्तेमाल किए जा सकते हैं.