ฉันจะทดสอบเพื่อดูว่าการเขียนทั้งหมดลงในฮาร์ดไดรฟ์ของฉันสอดคล้องกับภาค 4k ได้อย่างไร


9

ฉันใช้ Linux กับฮาร์ดไดรฟ์ 4 ตัวที่ใช้งานเซกเตอร์ 4k มีหลายเลเยอร์ระหว่างระบบไฟล์ของฉันและอุปกรณ์ raw: ดิสก์> Linux Raid 5> dm-crypt> LVM

ทุกทรัพยากรที่ฉันพบได้อธิบายวิธีการตั้งค่าแต่ละเลเยอร์เพื่อให้แน่ใจว่าการเขียนที่ด้านบนของเลเยอร์นั้นจะถูกจัดแนวกับขอบเขตเซกเตอร์ 4k อย่างไรก็ตามฉันไม่พบสิ่งใดที่อธิบายวิธีการตรวจสอบว่าการเขียนที่ทำกับฮาร์ดไดรฟ์นั้นเกิดขึ้นจริงที่ขอบเขต 4k

ฉันไม่สนใจตรวจสอบการตั้งค่าของฉันใหม่เพื่อใช้ตรรกะเพื่อตรวจสอบว่ามีการจัดแนวอย่างถูกต้องหรือไม่ ฉันต้องการตรวจสอบสิ่งที่เกิดขึ้นจริงเมื่อทำการเขียนลงดิสก์

ฉันจะบันทึกหรือดูที่อยู่และขนาดของการเขียนที่ทำกับฮาร์ดไดรฟ์ของฉันได้อย่างไรเพื่อให้สามารถตรวจสอบว่ามีการจัดตำแหน่งที่ถูกต้องได้อย่างไร

คำตอบ:


2

ถามคำถามเดียวกันกับตัวเองเมื่อไม่นานมานี้และทำสิ่งต่อไปนี้เพียง:

เขียนด้วยเปลือกสองสามครั้งสตริงค่อนข้างผิดปกติไปยังไฟล์ (เช่น "WackaWacka") จากนั้นก็ค้นหาด้วยการถ่ายโอนฐานสิบหก (ใช้od ) เนื้อหาจริงของดิสก์และตรวจสอบว่าเกิดขึ้นครั้งแรกของสตริงถูกเก็บไว้ ตรงจุดเริ่มต้นของบล็อก 4k

คำแนะนำ: อย่าใช้เครื่องมือแก้ไข - มันอาจสร้างไฟล์ชั่วคราวที่คุณไม่รู้จักซึ่งอาจมีสตริงเช่นกัน ทำเช่นนี้:

 $ for i in 1 2 3 4 5 ...
 >  do
 >   echo "WackaWacka!"
 >  done > mytestfile

ดังนั้น. sh_history อาจมีสตริงการค้นหา แต่ไม่ใช่ 5 ครั้งในแถว ;-)

จากนั้นเพียงค้นหา:

 # sync
 # od -c /dev/sda | grep 'W   a   c   k   a'

ทำได้ดีที่สุดบนดิสก์ที่ค่อนข้างว่างเปล่าเพื่อหลีกเลี่ยงการส่งผ่านข้อมูลกิกะไบต์ ;-)


1
เนื่องจาก dm-crypt เป็นหนึ่งในเลเยอร์ในสแต็กของฉันโซลูชันนี้ไม่เพียงพอเนื่องจากอักขระเหล่านี้จะไม่ถูกเขียนลงดิสก์
Brian Pellin

เลวร้าย. วิธีแก้ปัญหาอื่นที่ฉันคิดว่ามีการเปลี่ยนแปลงอย่างชัดเจนหนึ่งบล็อก 4k ในไฟล์และตรวจสอบว่ามีเพียงเนื้อหาของฟิสิคัลบล็อกหนึ่งบล็อกบนดิสก์ที่มีการเปลี่ยนแปลง (หรือถ้าบล็อกที่ต่อเนื่องกันสองบล็อกได้รับผลกระทบ) - และจะใช้งานได้ โดยชั้นการเข้ารหัส อย่างไรก็ตามสิ่งหนึ่งที่ต้องรู้คือการจัดเก็บไฟล์บล็อกดิสก์ไว้และการค้นหาการเปลี่ยนแปลงใด ๆอาจเป็นเรื่องยากสำหรับดิสก์ขนาดใหญ่
ktf

2

เขียนบล็อก 4k และดูจำนวนข้อมูลที่อ่าน / เขียนด้วยiostat(คอลัมน์ 'Blk_read' 'Blk_wrtn') หากข้อมูลไม่ถูกจัดตำแหน่งการเขียนจะทริกเกอร์อ่านก่อนและจะทริกเกอร์การเขียนมากกว่า 4k

คุณจะต้องระมัดระวังในการได้วัดการปรับปรุงข้อมูลเมตาใด ๆ แต่ ... หรือเพียงแค่จมน้ำตายพวกเขาออกโดยการทำ 1000s ของ 4k เขียน .... เพื่อให้แน่ใจว่าไม่มีอะไรอื่นจะสแกนดิสก์หรือถือเปิดไฟล์ (ฉันคิดว่าlsofจะเป็น เพียงพอหรือไม่) จากนั้นเปิดไฟล์ใหม่รอเรียกใช้iostatเขียน 4k ไปยังไฟล์ซิงค์การเขียน (หรือรอสักครู่?) จากนั้นตรวจสอบiostatอีกครั้ง

ดูเหมือนว่าจะให้ผลลัพธ์ที่สมเหตุสมผลสำหรับฉัน:

iostat  -d /dev/hdb3
dd if=/dev/urandom of=/mount/path/ofhdb3/tmptest bs=4k count=10000 conv=fdatasync
iostat  -d /dev/hdb3

iostatหน้าคนของหมายเหตุอ้างว่ารายงานในบล็อก 512 ไบต์และฉันเห็นว่ามีการเขียนบล็อกเพิ่มเติมมากกว่า 80000 บล็อกเท่านั้นและไม่มีการอ่านบล็อก หากการจัดตำแหน่งของคุณปิดอยู่คุณจะเห็นจำนวนการอ่านที่คล้ายกัน (เนื่องจากการเขียน 4k ที่จัดแนวผิดต้องใช้การอ่านสองบล็อกที่ได้รับผลกระทบการกลายพันธุ์และการเขียนกลับ) ในความเป็นจริงการจัดตำแหน่งเหตุผลเพียงอย่างเดียวที่สำคัญก็คือการหลีกเลี่ยงการอ่าน (ดังนั้นนั่นคือสิ่งที่คุณต้องการค้นหา: ทริกเกอร์ภาระงานการเขียนจะอ่านหรือไม่)


คุณรู้หรือไม่ว่า iostat รายงานจำนวนการอ่าน / เขียนที่ระบบปฏิบัติการทำกับอุปกรณ์บล็อกหรือว่าตัวเลขนี้อ้างอิงจากไดรฟ์ที่รายงานว่ามีการอ่านและเขียนเป็นจำนวนเท่าใด
Brian Pellin

ฉันสงสัยว่ามันมาจากสิ่งที่เป็นนามธรรมของอุปกรณ์บล็อก OS ไม่ใช่โดยตรงจากไดรฟ์ แต่ฉันไม่รู้แน่ชัด ฉันก็ไม่แน่ใจเหมือนกันว่ามันจะเป็น "บน" หรือ "ใต้" เลเยอร์ dm-crypt เช่นกัน
PT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.