दो मुख्य तत्व हैं hdparm --fibmap file
, जो आपको बताता है कि फ़ाइल भौतिक रूप से LV के भीतर कहाँ स्थित है, और lvs -o +seg_pe_ranges,vg_extent_size
जो आपको बताता है कि LV आपके डिवाइस (ओं) पर कहाँ स्थित है।
बाकी गणित है।
इसलिए, उदाहरण के लिए:
# hdparm --fibmap linux-3.8.tar.bz2
linux-3.8.tar.bz2:
filesystem blocksize 4096, begins at LBA 0; assuming 512 byte sectors.
byte_offset begin_LBA end_LBA sectors
0 288776 298511 9736
4984832 298520 298623 104
5038080 298640 298695 56
5066752 298736 298799 64
5099520 298824 298895 72
[...]
मुझे नहीं पता कि यह इतना खंडित क्यों है - wget के साथ डाउनलोड किया गया। एक अच्छा उदाहरण हो सकता है क्योंकि जैसा कि आप देखते हैं, आपको किसी भी तरह से स्क्रिप्टिंग के बिना सिरदर्द मिलता है, कम से कम खंडित फ़ाइलों के लिए। मैं सिर्फ पहला खंड 288776-298511 (9736 क्षेत्र) ले जाऊंगा। गिनती गलत है क्योंकि यह 512 बाइट सेक्टर नहीं है, लेकिन किसी भी तरह।
पहले जांचें कि यह डेटा वास्तव में सही है:
# dd if=linux-3.8.tar.bz2 bs=512 skip=0 count=9736 | md5sum
9736+0 records in
9736+0 records out
4984832 bytes (5.0 MB) copied, 0.0506548 s, 98.4 MB/s
7ac1bb05a8c95d10b97982b07aceafa3 -
# dd if=/dev/lvm/src bs=512 skip=288776 count=9736 | md5sum
9736+0 records in
9736+0 records out
4984832 bytes (5.0 MB) copied, 0.123292 s, 40.4 MB/s
7ac1bb05a8c95d10b97982b07aceafa3 -
Wheeee। क्या समान है इसलिए हम सही जगह पर LV-src पढ़ रहे हैं। अब स्रोत-LV कहाँ स्थित है?
# lvs -o +seg_pe_ranges,vg_extent_size
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert PE Ranges Ext
[...]
src lvm -wi-ao--- 4.00g /dev/dm-1:5920-6047 32.00m
[...]
अब यह उबाऊ है, यह LV खंडित नहीं है। यहां सिरदर्द नहीं है। वैसे भी।
यह कहता है कि src / dev / dm-1 पर है और PE 5920 से शुरू होता है और PE 6047 पर समाप्त होता है। और PE का आकार 32BB है।
तो देखते हैं कि क्या हम सीधे / देव / dm-1 से एक ही चीज़ पढ़ सकते हैं। गणित के लिहाज से, यह एक छोटा सा धब्बा है क्योंकि हमने पहले 512 बाइट का इस्तेमाल किया था ...: - / / लेकिन मैं आलसी हूँ इसलिए मैं सिर्फ MiB की गणना करूँगा और फिर 512 से भाग करूँगा! हा! :-D
# dd if=/dev/dm-1 bs=512 skip=$((1024*1024/512 * 32 * 5920 + 288776)) count=9736 | md5sum
9736+0 records in
9736+0 records out
4984832 bytes (5.0 MB) copied, 0.0884709 s, 56.3 MB/s
3858a4cd75b1cf6f52ae2d403b94a685 -
बू बू। यह वह नहीं है जिसकी हम तलाश कर रहे हैं। क्या गलत हुआ? आह! हम LVM मेटाडेटा और बकवास के भंडारण के लिए PV की शुरुआत में LVM के कब्जे वाले ऑफसेट को जोड़ना भूल गए। आमतौर पर यह MiB-align है, इसलिए बस एक और MiB जोड़ें:
# dd if=/dev/dm-1 bs=512 skip=$((1024*1024/512 * 32 * 5920 + 288776 + 1024*1024/512)) count=9736 | md5sum
9736+0 records in
9736+0 records out
4984832 bytes (5.0 MB) copied, 0.0107592 s, 463 MB/s
7ac1bb05a8c95d10b97982b07aceafa3 -
ये लो।