ปรับขนาดเซกเตอร์ตรรกะให้เหมาะสมสำหรับขนาดเซกเตอร์กายภาพ 4096 HDD


20

ด้วยฮาร์ดไดรฟ์ใหม่จำนวนมากขนาดเซกเตอร์กายภาพคือ 4096 เป็นไปได้ไหมที่จะทำให้ระบบใช้ขนาดเซกเตอร์ตรรกะที่มีขนาดเท่ากันแทนที่จะเป็นขนาดเซกเตอร์เชิงตรรกะเริ่มต้นที่ 512

มันจะเพิ่มความเร็วในการอ่านและเขียนจำนวนมากหรือไม่ สามารถกำหนดค่าได้ที่ไหน


ดูunix.stackexchange.com/a/18542/1131สำหรับความคิดเห็นเกี่ยวกับปัญหาการจัดตำแหน่ง เวอร์ชันล่าสุดmkfs.*ควรใช้ขนาดเซกเตอร์ที่เหมาะสมที่สุดโดยอัตโนมัติ คุณสามารถทำการmkfs.*ทดสอบและตรวจสอบผลลัพธ์ (ในเอาต์พุต verbose ของ mkfs หรือในโปรแกรมอรรถประโยชน์ fs ที่เกี่ยวข้อง)
maxschlepzig

ขอขอบคุณ แต่ไม่มีปัญหาการจัดตำแหน่ง
Matan

คำตอบ:


29

512 ไบต์ไม่ใช่ขนาดเซกเตอร์เริ่มต้นจริง ๆ ขึ้นอยู่กับฮาร์ดแวร์ของคุณ

คุณสามารถแสดงขนาดฟิสิคัล / โลจิคัลเซกเตอร์ของดิสก์รายงานผ่าน/sysระบบไฟล์หลอกตัวอย่างเช่น:

# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512

ความแตกต่างระหว่างสองค่าเหล่านั้นคืออะไร?

  • นี่physical_block_sizeเป็นขนาดที่เล็กที่สุดของบล็อกที่ไดรฟ์สามารถเขียนได้ในการทำงานแบบปรมาณู
  • logical_block_sizeเป็นขนาดที่เล็กที่สุดไดรฟ์ที่มีความสามารถในการเขียน (cf เอกสารลินุกซ์เคอร์เนล)

ดังนั้นหากคุณมีไดรฟ์ขนาด 4k การใช้หน่วยเก็บข้อมูล (ระบบไฟล์และอื่น ๆ ) ของคุณนั้นใช้สิ่งที่เท่ากับหรือมากกว่าขนาดเซกเตอร์กายภาพ

ค่าเหล่านั้นจะแสดงในเวอร์ชันล่าสุดfdiskเช่น

# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes

ในการแจกแจงลินุกซ์ปัจจุบันโปรแกรม (ที่ควรใส่ใจเกี่ยวกับขนาดเซกเตอร์ที่ดีที่สุด) mkfs.xfsจะเลือกขนาดเซกเตอร์ที่ดีที่สุดโดยค่าเริ่มต้น (เช่น 4096 ไบต์)

แต่คุณสามารถระบุได้อย่างชัดเจนผ่านตัวเลือกตัวอย่างเช่น:

# mkfs.xfs -f -s size=4096 /dev/sda

หรือ:

# mkfs.ext4 -F -b 4096 /dev/sda

ไม่ว่าในกรณีใดmkfsตัวแปรส่วนใหญ่จะแสดงขนาดบล็อกที่ใช้ระหว่างการดำเนินการ

สำหรับระบบไฟล์ที่มีอยู่ขนาดบล็อกสามารถกำหนดได้ด้วยคำสั่งเช่น:

# xfs_info /mnt
[..]
meta-data=                       sectsz=4096
data     =                       bsize=4096
naming   =version 2              bsize=4096
log      =internal               bsize=4096
         =                       sectsz=4096
realtime =none                   extsz=4096

หรือ:

# tune2fs -l /dev/sda
Block size:               4096
Fragment size:            4096

หรือ:

# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size             4
sys_array_size        97
sectorsize            4096
nodesize              16384
leafsize              16384
stripesize            4096
dev_item.sector_size  4096

เมื่อสร้างระบบไฟล์บนพาร์ติชันสิ่งอื่นที่ต้องตรวจสอบคือถ้าที่อยู่เริ่มต้นของพาร์ติชันนั้นสอดคล้องกับขนาดบล็อกจริง ตัวอย่างเช่นดูที่fdisk -lเอาต์พุตแปลงที่อยู่เริ่มต้นเป็นไบต์หารด้วยขนาดบล็อกฟิสิคัล - การเตือนต้องเป็นศูนย์หากพาร์ติชันถูกจัดตำแหน่ง


ขอบคุณคำอธิบายของคุณเกี่ยวกับสิ่งที่ Linux อธิบายว่าขนาดบล็อกแบบลอจิคัลและฟิสิคัลมีประโยชน์มาก ฉันเพิ่งเจอสถานการณ์ที่ฮาร์ดไดรฟ์ 8TB เดียวกันปรากฏขึ้นเป็นบล็อกขนาด 512 ไบต์ในกล่อง USB หนึ่งและบล็อก 4K ในอีกรูปแบบหนึ่งทั้งแบบตรรกะและแบบกายภาพ ฉันคิดว่ามีบางอย่างผิดปกติเนื่องจาก Linux ไม่เห็นแผนผังพาร์ติชันเมื่อฉันเปลี่ยนกล่องหุ้ม แต่แล้วฉันพบว่า GPT เริ่มต้นที่บล็อกตรรกะตัวที่สองดังนั้นมันจึงอยู่ในตำแหน่งที่ไม่ถูกต้องสำหรับการจัดแนวใหม่ ฉันใช้ gdisk เพื่อสร้างพาร์ติชันขนาดใหญ่หนึ่งพาร์ติชันใหม่และข้อมูลทั้งหมดของฉันยังคงอยู่ที่นั่น (ext4 ที่มีบล็อก 4K)
Raptor007

เป็นวิธีที่คุณอธิบายเพื่อตรวจสอบการจัดตำแหน่งที่เชื่อถือได้หรือไม่ ฉันใช้ยูทิลิตี้ "แยก" และรายงานว่าพาร์ทิชัน hdd ถูกจัดตำแหน่ง แต่ด้วยวิธีการที่คุณสอบถามขนาดบล็อกทางกายภาพได้ 512 แล้วเอาที่อยู่เริ่มต้นของพาร์ทิชันจากfdisk -lหารด้วย 8 แล้ว 512 ส่วนที่เหลือไม่ได้เป็น 0 ดังนั้นดูเหมือนว่าพาร์ทิชันจะไม่ได้รับการจัดแนว
user907860

1
@ user907860 ทำไมคุณถึงหารด้วย 8 fdisk -lรายงานUnits = sectors of 1 * 512 = 512 bytesในหนึ่งของระบบ Linux ของฉัน - จึงเป็นตรรกะไดรฟ์ 512/4096 / ทางกายภาพที่มี 2 พาร์ติชั่นเริ่มต้นที่ 2,048 และ 1,026,048 ผมคำนวณ2048*512%4096และ1026048*512%4096- เช่นในเปลือกหลาม เนื่องจากทั้งสองนิพจน์เท่ากับศูนย์พาร์ติชันเหล่านั้นจะถูกจัดตำแหน่ง 4k
maxschlepzig

ขอบคุณมากสำหรับคำอธิบายฉันไม่ได้สังเกตว่าตัวเลขเป็นเซ็กเตอร์ไม่ใช่บิต ฉัน upvote คำตอบสองสามเดือนที่ผ่านมาเศร้าไม่สามารถทำมันได้อีกครั้ง
user907860

2

ไม่เป็นไปไม่ได้และไม่สำคัญว่าจะเป็นเช่นไร โดยทั่วไปแล้ว IO จะทำในหน่วยอย่างน้อย 4096 ไบต์ แต่อย่างใดและมักจะมากขึ้น


2
ไม่แน่ใจว่าคำสั่งนี้เกี่ยวข้องกับคำถามของฉันอย่างไรขนาดเซกเตอร์แบบลอจิคัลอาจบอกถึงชิ้นส่วนที่เล็กลงในส่วนของท่อ IO บางส่วนรวมถึงการจำลองแบบที่ไม่จำเป็นในเฟิร์มแวร์ HDD สนใจที่จะชี้แจง?
Matan

2
@Matanan ฉันไม่สามารถเข้าใจความคิดเห็นของคุณได้เลย ฉันอธิบายว่า IO ไม่ได้ทำงานทีละ 512 ไบต์ดังนั้นความจริงที่ว่าดิสก์ถูกระบุในส่วนที่ 512 ไบต์นั้นไม่สำคัญ ครั้งเดียวที่ไดรฟ์ต้องทำการจำลองใด ๆ คือถ้าคุณพยายามทำการเขียนที่ไม่ได้อยู่ในแนวเดียวกัน 4k และเนื่องจาก IO โดยปกติแล้วจะทำแบบทวีคูณเป็น 4k แต่อย่างใดและเครื่องมือการแบ่งพาร์ติชันที่ทันสมัยทำให้แน่ใจว่าพาร์ติชันเริ่มต้น ที่จะไม่เกิดขึ้น
psusi

1
"คำตอบ" นี้ผิดทั้งหมดทั้งในข้อกล่าวอ้างและข้อสรุป ขนาดโลจิคัลถูกตั้งค่าเมื่อฟอร์แมตโวลุ่ม ขนาดไม่ตรงกันระหว่างขนาดโลจิคัลและฟิสิคัลมีค่าใช้จ่ายแน่นอนในเทคโนโลยีเช่นหน่วยเก็บข้อมูลแบบแฟลช
Chris Stratton

@ChrisStratton ไม่คุณกำลังคิดถึงขนาดบล็อก / คลัสเตอร์ของระบบไฟล์ ขนาดเซกเตอร์เชิงตรรกะคือขนาดของเซกเตอร์ที่ไดรฟ์รายงานไปยังระบบปฏิบัติการและสามารถอ่านและเขียนหน่วยของขนาดนั้นหรือหลายขนาดนั้นและเซกเตอร์นั้นจะถูกกำหนดหมายเลขในหน่วยของขนาดนั้น เปรียบเทียบกับขนาดเซกเตอร์กายภาพที่บางไดรฟ์อ่านและเขียนเซ็กเตอร์ 4k ภายใน แต่แสร้งว่าพวกเขากำลังใช้เซกเตอร์ 512 ไบต์สำหรับความเข้ากันได้แบบย้อนหลังกับระบบปฏิบัติการรุ่นเก่าที่ไม่สามารถจัดการกับเซกเตอร์ตรรกะ 4k
psusi

ไม่ถูกต้อง ปัญหาเกิดขึ้นทุกครั้งที่คุณมีซอฟต์แวร์ที่พยายามใช้งานบนหน่วยที่เล็กกว่าขนาดจริงของระบบจัดเก็บข้อมูล นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งกับหน่วยลอจิกที่เล็กกว่าขนาดบล็อกลบแฟลช - ซอฟต์แวร์สิ้นสุดลงด้วยการทำซ้ำส่วนที่ไม่ได้ถูกแตะต้องไปยังบล็อกทางกายภาพใหม่และค่าใช้จ่ายในการลบอายุการใช้งาน ภายในไดรฟ์
Chris Stratton

1

ใช่เป็นไปได้ แต่การทำเช่นนั้นจะทำให้ไดรฟ์กรอกข้อมูลเร็วกว่าที่ควร สำหรับไฟล์ที่น้อยกว่า 512K แต่ละไฟล์จะใช้เต็ม 4096K (4MB) และเติมเซกเตอร์ที่เหลือด้วย 0's เนื่องจากไม่สามารถใช้ระบบไฟล์ส่วนใหญ่ (NTFS และอื่น ๆ ) เพื่ออนุญาตให้แชร์ไฟล์ได้ ตัวเลือกที่ดีที่สุดสำหรับระบบไฟล์คืออนุญาตให้มีขนาดเซกเตอร์ผันแปรอย่างไรก็ตามนี่เป็นการเพิ่มขนาดของ MFT (ตารางไฟล์หลัก) และเพิ่มความเสี่ยงของความเสียหายของข้อมูลในขณะที่ลดความสามารถในการกู้คืนข้อมูลได้อย่างง่ายดาย กล่าวอีกนัยหนึ่งว่าซอฟต์แวร์กู้คืนข้อมูลจะไม่ทราบขอบเขตทั้งหมด ดังนั้นในขณะที่ขนาดเซกเตอร์ตรรกะ 4096K นั้นยอดเยี่ยมสำหรับไฟล์ขนาดใหญ่สำหรับพีซีที่ใช้งานทั่วไปในชีวิตประจำวันมันก็แค่ 0 ตอนนี้กับที่กล่าวว่า มีตัวเลือกในการจัดเก็บข้อมูลใน MFT เองเมื่อมันมาถึงข้อมูลที่มีขนาดเล็กกว่าขนาดเซกเตอร์ตรรกะ อย่างไรก็ตามนี่หมายความว่า MFT ของคุณมีขนาดใหญ่มากและข้อมูลจะถูกเขียนสองครั้ง (มี MFT สองสำเนาใน HDD ของคุณ) คุณจะต้องระบุขนาดสูงสุดของ MFT ซึ่งอาจทำให้เกิดปัญหาเมื่อคุณใช้งานจนสุดความสามารถหรือการใช้งานไดรฟ์เกินกว่าที่ MFT จะใช้งานได้ฟรี ทั้งหมดนี้ขึ้นอยู่กับการใช้งานระบบไฟล์ NTFS ที่ด้านสว่างของสิ่งต่าง ๆ NTFS อนุญาตให้คุณใช้การบีบอัดเนทีฟสำหรับไฟล์ที่ระดับบล็อกสำหรับขนาดเซกเตอร์ตรรกะใด ๆ ที่ 4MB หรือน้อยกว่า ข้อ จำกัด นี้ถูกนำไปใช้เนื่องจากวิธีการบีบอัด NTFS ทำงาน บล็อก 4MB ถูกอ่านและบีบอัดโดยไม่คำนึงถึงขนาดเซกเตอร์ตรรกะ แน่นอนนี้

ดังนั้นสิ่งนี้ชัดเจนขึ้นสำหรับคุณหรือไม่


ฉันคิดว่าคำตอบนี้จะดีกว่าถ้ามันไม่ได้ใช้ NTFS เป็นระบบไฟล์ตัวอย่างเนื่องจาก (ยกเว้นกรณีที่มีการเปลี่ยนแปลงในช่วงสองสามปีที่ผ่านมา) มันไม่ได้รับการสนับสนุนที่ดีหรืออย่างใดอย่างหนึ่งภายใต้ Unix และเพื่อน ๆ
Fox

K ย่อมาจาก Kilo ซึ่งเป็นหน่วยนำหน้าตัวชี้วัดความหมายหนึ่งพัน 4 MiB คือ 1024 เซกเตอร์และไม่ใช่ 1 อย่างที่คุณแนะนำ 4096 ไบต์คือ 4 KiB หรือ 0,00390625 MiB
Aeyoun

นี่ไม่ใช่คำตอบ OP กำลังพูดถึงเซกเตอร์ขนาดของ HDD ไม่ใช่ขนาดบล็อกของระบบไฟล์ นั่นคือชั้นที่แตกต่างกัน
炸鱼薯条德里克

-1
Sector:

1) Logical Sector: Called Native Sector.

Manufacture default setting. user cannot change.

Before 2010 year: 512b/sector

After 2010 year: 4k/sector.

Few manufacture provide HDD tool to change native sector.

2) Physical Sector: Called Cluster(or allocation unit - FAT windows) or Block(Linux/Unix)

User can change physical sector size 512b,1k,2k,4k,... by format or partition tool. Physical sector contains one or few more native sectors.

(example1: if you have HDD 512b/native sector: user can set 4K/Physical sector. this mean 1 cluster = 4 native sector)

(example2: if you have HDD 4K/native sector: user can set 4K/Physical sector. this mead 1 cluster = 1 native sector)

3) File system deal with Physical sector(or block or Cluster) only.

คุณพลาดที่จะเขียนแหล่งที่มาของคำพูดนี้ ในทางกลับกันฉันคิดว่านี่เป็นสำเนาความคิดเห็นก่อนหน้าของคุณที่นี่: superuser.com/a/1372494/141252
andras.tim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.