การย้ายไฟล์ระหว่างสองไดรฟ์บน SSD หนึ่งตัว - จะถูกคัดลอกหรือไม่


18

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

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

มีคำถามซ้ำที่นี่แล้ว แต่คำตอบทั้งคู่อ้างว่า:

แต่ละพาร์ติชั่นจะมีพื้นที่ฟิสิคัลของไดร์ฟเอง

และ

การแบ่งพาร์ติชันฮาร์ดไดรฟ์กำหนดพื้นที่ทางกายภาพสำหรับแต่ละพาร์ติชัน [และในความคิดเห็น:] SSD ยังคงเป็นฮาร์ดไดรฟ์ก็แค่ไม่มีดิสก์

เท่าที่ฉันรู้ว่ามันผิด ดูที่นี่

ดังนั้นใครบางคนที่รู้เพิ่มเติมเกี่ยวกับ SSD โปรดบอกฉันว่าพวกเขาถูกต้องในการประเมินของพวกเขาแม้จะมีข้อผิดพลาดหรือไม่?


14
คำตอบที่ยอมรับนั้นถูกต้อง: แต่ละพาร์ติชั่นมีระบบไฟล์เป็นของตัวเอง แต่ละระบบไฟล์ตัดสินใจเองว่าจะใช้ประโยชน์บล็อกที่กำหนดให้อย่างไร ในการทำสิ่งที่คุณเสนอเฟิร์มแวร์ของ SSD ระบบไฟล์และเครื่องมือผู้ใช้เช่น Linux mvจะต้องให้ความร่วมมือผสมเลเยอร์สิ่งที่เป็นนามธรรมอย่างมาก
Kamil Maciorowski

2
@Kamil: หากระบบปฏิบัติการใช้งานmvจริงจะต้องทำน้อยกว่าที่เป็นอยู่ในปัจจุบันฉันสงสัย (นั่นคือระบบปฏิบัติการจะต้องตรวจสอบให้แน่ใจว่าการเปลี่ยนชื่อระบบไฟล์ข้าม () ประสบความสำเร็จแทนการล้มเหลวอย่างที่เกิดขึ้นในปัจจุบัน)
grawity

16
"2 ไดรฟ์บน [SSD / HDD]" - ฉันคิดว่าคุณหมายถึงระบบไฟล์ 2 พาร์ติชันหรือ 2 พาร์ติชันใน SSD / HDD หนึ่งตัว โปรดจำไว้ว่า "D" ตัวสุดท้ายในตัวย่อทั้งสองคือ "ไดรฟ์" ดังนั้นคุณจึงพูดว่า 2 ไดรฟ์ใน 1 ไดรฟ์ซึ่งไม่สมเหตุสมผล
JoL

1
ยกตัวอย่างเช่นกล่องโต้ตอบการจัดการดิสก์ มันบอกว่าChange Drive Letter and Pathsเมื่อพูดถึงพาร์ทิชัน / ปริมาณ
ispiro

4
@ispiro นั่นบน Windows เหรอ? ดูเหมือนว่าเป็นวิธีที่น่ากลัวในการสร้างความสับสนให้ผู้ใช้ ฉันสามารถเดาได้ว่าพวกเขาเกิดขึ้นกับคำว่า "Drive Letter" ก่อนที่จะนำพาร์ติชั่นไดรฟ์ไปใช้งานและจากนั้นพวกเขาก็จบลงด้วยการเป็นตัวแทนของ ดังนั้นตอนนี้คุณสามารถมี Windows หลาย "ไดรฟ์" ที่เป็นตัวแทนของพาร์ทิชันของไดรฟ์ฮาร์ดแวร์หนึ่ง ...
Jol

คำตอบ:


38

เท่าที่ฉันรู้ว่ามันผิด

คำอธิบายที่ยกมาเป็นครึ่งถูกต้องครึ่งผิด แต่มันก็เป็นความผิดครึ่งหนึ่งสำหรับ HDD ด้วยเช่นกัน

การแบ่งพาร์ติชันของไดรฟ์จะกำหนดภูมิภาคแบบลอจิคัลสำหรับแต่ละพาร์ติชัน ระบบปฏิบัติการไม่สนใจตำแหน่งทางกายภาพเลย - เพียงแค่ขอให้ไดรฟ์ "อ่านโลจิคัลบล็อก # 31415926" และตัวไดรฟ์เองก็ตัดสินใจว่าข้อมูลอยู่ที่ไหน วิธีนี้ทำงานในลักษณะเดียวกันสำหรับหน่วยความจำแบบแม่เหล็กและแฟลช

จริงๆแล้วมันเหมือนกับ HDDs ในช่วง 20-25 ปีที่ผ่านมา: แม้ว่าระบบปฏิบัติการยุคแรก ๆ จะใช้ตำแหน่งทรงกระบอก / หัว / เซกเตอร์ทางกายภาพ แต่มันก็หายไปนานแล้ว คุณไม่รู้แน่ชัดว่าเก็บ LBA # 1234 ไว้ที่ไหน HDD ยังทำการแมปเซกเมนต์ทางกายภาพที่ไม่ดีโดยอัตโนมัติดังนั้น LBA เดียวกันสามารถอ่านได้จากพื้นที่ทางกายภาพที่แตกต่างกันโดยสิ้นเชิงเช่นเดียวกับ SSD

ดังนั้นด้วยทั้ง HDD และ SSD ระบบปฏิบัติการจึงมีช่วง LBA (เช่น 0–999999) เพื่ออ่านและเขียนข้อมูล วัตถุประสงค์ของการแบ่งพาร์ติชันคือการจัดสรรช่วงย่อยในนั้น - เช่นพาร์ติชัน A รับ 10–499999 พาร์ติชัน B ได้รับ 500000–999999 แต่ละพาร์ติชันมีระบบไฟล์อิสระและระบบไฟล์ภายในแต่ละพาร์ติชันไม่สามารถอ้างอิงข้อมูลภายนอกได้ - ไม่สามารถข้ามขอบเขตของพาร์ติชันได้ (ตัวอย่างเช่นพาร์ติชัน A ไม่สามารถมีไฟล์ที่มีข้อมูลถูกเก็บไว้ในเซกเตอร์ # 600000)

เป็นผลให้ไฟล์ทั้งหมดที่ย้ายจากที่หนึ่งไปยังอีกที่จะต้องคัดลอกในเต็ม

(ดังที่กล่าวไว้ในทางทฤษฎีแล้วระบบปฏิบัติการอาจขอให้ดิสก์ทำซ้ำข้อมูลจากพื้นที่หนึ่งไปยังอีกพื้นที่หนึ่ง (เช่น "คัดลอก LBA # 1234 ไปยัง # 567890") โดยไม่ต้องคัดลอกไปยังหน่วยความจำหลักแล้วย้อนกลับ และแน่นอนว่าสิ่งนี้จะข้ามเขตแดนของพาร์ติชันได้อย่างสมบูรณ์ซึ่งอาจใช้ประโยชน์จาก "เลเยอร์การแปลแฟลช" ของ SSD ตัวอย่างเช่นในทางปฏิบัติเท่าที่ฉันรู้


ฉันคิดว่าคุณพูดถูก แต่แจ้งให้ทราบว่ามีเป็นอีกทางเลือกหนึ่ง ไดรฟ์สามารถตัดสินใจว่าเซกเตอร์ # 001 บนไดรฟ์ # 1 ตอนนี้จะสลับกับเซกเตอร์ # 123 ในไดรฟ์ # 2 (เช่นเซกเตอร์ # 001 บนไดรฟ์ # 1 ในขณะนี้จะอ้างถึงข้อมูลทางกายภาพ ไดรฟ์ # 2) จึงย้ายไฟล์โดยไม่ต้องคัดลอกไบต์ ดังนั้นในหลักการแล้วการเคลื่อนย้าย TB ของข้อมูลจึงใกล้เข้ามาทันที
ispiro

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

6
SSD บางตัวใช้การทำซ้ำระดับบล็อก เช่น Sandforce ( en.wikipedia.org/wiki/SandForce#Technology ) เป็นหนึ่งในคนกลุ่มแรก ๆ ที่นำสิ่งนี้ไปใช้และผู้ควบคุมของพวกเขาได้ก้าวเข้าสู่ผลิตภัณฑ์ของผู้ผลิต SSD หลายราย ตัวควบคุม Sandforce มีปัจจัย "เขียนขยาย" น้อยกว่าหนึ่ง - ซึ่งหมายความว่าพวกเขาเขียนข้อมูลลงในที่เก็บข้อมูลแฟลชน้อยกว่าที่ระบบปฏิบัติการส่งไปยังไดรฟ์ จากการเปรียบเทียบ SSD โดยทั่วไปจะมีตัวประกอบการเขียนมากกว่าหนึ่งตัว
hojusaram

2
@hojusaram: จริง แต่ก็ยังมีการลดความซ้ำซ้อนของ post-factum - ลดการเขียนแฟลช แต่ข้อมูลยังคงอ่านคัดลอกจากดิสก์ไปยังหน่วยความจำระบบปฏิบัติการแล้วกลับไปที่ตัวควบคุมดิสก์ ispiro หมายถึงอะไรฉันคิดว่า SSD เทียบเท่ากับ "reflink" หรือ "copy on write" (เช่น cp --reflink) ที่ระบบปฏิบัติการสามารถขอให้ดิสก์ทำงานด้วยตัวเองอย่างชัดเจน
grawity

1
มันน่าสนใจที่จะค้นพบว่า APFS จัดการกับเรื่องนี้อย่างไรเมื่อขอบเขตของพาร์ติชั่นไม่ได้รับการแก้ไขอีกต่อไป
เท็ตสึจิน

9

จะเกิดอะไรขึ้นเมื่อข้อมูลถูกเขียนลงใน Solid State Disk มีคุณค่าหลายบทความ (สรุปดีที่นี่ ) เพราะมันซับซ้อนมากและขึ้นอยู่กับเทคโนโลยีพื้นฐาน เรื่องสั้นคือ SSD ทั่วไปไม่สามารถเขียนศูนย์บิตไปยังหน่วยความจำ แต่พวกเขาจะต้องเป็นศูนย์ (ลบ) ทั้งส่วนของหน่วยความจำและจากนั้นพวกเขาสามารถจัดเก็บข้อมูลหลังจากนั้นเพียงแค่เขียนหน่วยลงไป โดยทั่วไปแล้วทุกวันนี้พวกเขาเขียนบล็อกขนาด 512 ไบต์ แต่ลบหน้า 8 บล็อกซึ่งเป็น 4096 นี่และความจริงที่ว่ารอบการเขียน / ลบแต่ละครั้งทำให้เกิดการสึกหรอทางกายภาพของหน่วยความจำและหน่วยความจำเสื่อมในที่สุดทำให้ SSD แตกต่างกันมาก กว่า HDDs หมุนแม่เหล็ก

นอกเหนือจากนั้นไดรฟ์ SATA (และไดรฟ์ AFAIK SAS) ไม่ได้ใช้คำสั่งดั้งเดิมเพื่อคัดลอกข้อมูลจากภาคหนึ่งไปยังอีกภาค (หรืออย่างน้อยที่สุดก็ไม่มีอะไรใน SATA หรือ SAS spec ที่ต้องการดังนั้นระบบปฏิบัติการจึงไม่สามารถนับคำสั่งที่มีอยู่) ดังนั้นการคัดลอกไฟล์ข้ามพาร์ติชั่นจะเกี่ยวข้องกับการอ่านข้อมูลจากเซกเตอร์ไดรฟ์หนึ่งไปยังหน่วยความจำโฮสต์ มันกลับไปที่ไดรฟ์ในภาคอื่น

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

นอกจากนี้ระบบไฟล์ (HFS +, NTFS, ext3 ฯลฯ ) เป็นชุดของโครงสร้างข้อมูลที่กำหนดลำดับในชุดของบล็อกโลจิคัล โครงสร้างข้อมูลเหล่านั้นใช้ "ไฟล์", "ชื่อไฟล์", "ไดเรกทอรี", "สิทธิ์" ฯลฯ ดังนั้นใช่เมื่อคุณย้ายไฟล์จากไดเรกทอรีหนึ่งไปยังอีกไดเรกทอรีหนึ่งจะไม่ถูกคัดลอก เฉพาะข้อมูลระบบไฟล์ที่ระบุว่าไดเร็กทอรีใดที่ไฟล์นั้นได้รับการอัพเดต

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

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

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

ด้วยเหตุผลทั้งหมดนี้มันเป็นงานที่มากเกินไปที่จะได้รับน้อยเกินไปสำหรับตัวเขียนระบบปฏิบัติการและตัวเขียนระบบไฟล์เพื่อใช้คุณสมบัติที่ปรับการเคลื่อนที่ข้ามพาร์ติชั่นสำหรับ SSD ดังนั้นการย้ายข้ามพาร์ติชั่นจะเป็นการอ่านและเขียน

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

แต่ไม่ต้องพึ่งมัน


1
ย่อหน้าสุดท้ายของคุณไม่ได้หมายความว่าระบบไฟล์จะต้องเหมือนกันหรือไม่ ฉันคิดว่า SSD ไม่รู้ว่าระบบไฟล์ใดกำลังทำงานอยู่ด้านบน หากตัวอย่างหนึ่งพาร์ทิชันใช้การบีบอัดและอื่น ๆ ไม่ได้คัดลอกโดย SSD อาจเป็นไปได้ว่าไฟล์เสียหาย
blablabla

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