ฉันเป็นนักศึกษาระดับบัณฑิตศึกษาสาขาเคมีเชิงคอมพิวเตอร์ที่มีการเข้าถึงคลัสเตอร์ Linux คลัสเตอร์ประกอบด้วยเซิร์ฟเวอร์ไฟล์ที่มีขนาดใหญ่มาก (25 TB) ซึ่งมีการเชื่อมต่อโหนดการคำนวณหลายโหล แต่ละโหนดการประมวลผลประกอบด้วยคอร์ Intel Xeon 8 ถึง 24 แกน แต่ละโหนดการคำนวณยังมีดิสก์ภายในตัวประมาณ 365 TB
เนื่องจาก fileserver มีการเข้าถึงเป็นประจำโดยผู้ใช้โหลหรือมากกว่านั้นในกลุ่มการวิจัยดังนั้นจึงมีการใช้ fileserver เป็นหลักสำหรับการจัดเก็บไฟล์ระยะยาว (มันถูกสำรองข้อมูลทุกคืน ดังนั้นผู้ดูแลระบบได้สั่งให้เรารันการจำลองบนดิสก์ภายในเครื่อง - ซึ่งมี I / O ที่เร็วกว่า fileserver - เพื่อไม่ให้ช้าลง fileserver สำหรับผู้ใช้รายอื่น
ดังนั้นฉันรันการจำลองบนดิสก์ภายในแล้วหลังจากเสร็จสิ้นฉันคัดลอกไฟล์วิถี - ฉันใช้การจำลองโมเลกุล (MD) - ไปยังไฟล์เซิร์ฟเวอร์เพื่อเก็บข้อมูล สมมติว่าฉันมีไฟล์ที่เรียกว่าวิถีในไดเรกทอรีบนดิสก์ท้องถิ่นของโหนดtraj.trr
/home/myusername/mysimulation1/traj.trr
สำหรับการจัดเก็บระยะยาวผมมักจะคัดลอกtraj.trr
ไปยังไดเรกทอรีใน fileserver ที่เป็น~/mysimulation1/traj.trr
ที่~
หมายถึงไดเรกทอรีของฉันใน fileserver /export/home/myusername
ที่ หลังจากคัดลอกแล้วฉันเป็นปกติวิสัยใช้du -h
เพื่อตรวจสอบว่ามีขนาดของไฟล์เช่นเดียวกับ/home/myusername/mysimulation1/traj.trr
~/mysimulation1/traj.trr
ด้วยวิธีนี้ฉันอย่างน้อยก็สามารถมั่นใจได้ว่าการถ่ายโอนไปยัง fileserver สำเร็จ ตัวอย่างเช่น:
cd /home/myusername/mysimulation1/
cp -v traj.trr ~/mysimulation1/
du /home/myusername/mysimulation1/traj.trr -h
du ~/mysimulation1/traj.trr -h
หากการเรียกสองสายdu -h
ให้ขนาดไฟล์ที่มนุษย์อ่านได้เหมือนกันฉันก็มั่นใจได้ว่าการถ่ายโอน / การคัดลอกนั้นประสบความสำเร็จ ( traj.trr
ไฟล์ทั่วไปของฉันมีขนาดตั้งแต่ประมาณ 15 ถึง 20 GB ขึ้นอยู่กับการจำลองที่แน่นอนที่ฉันใช้) ถ้าฉันเรียกใช้du
(เช่นไม่มี-h
สวิตช์) บนtraj.trr
ไฟล์ทั้งสองขนาดของพวกเขาเป็นไบต์มักจะคล้ายกันมาก - - ปกติภายในไม่กี่ไบต์ ฉันใช้วิธีโดยรวมนี้ในปีครึ่งที่ผ่านมาโดยไม่มีปัญหา
อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันพบปัญหาต่อไปนี้: บางครั้งdu -h
รายงานว่าtraj.trr
ไฟล์ทั้งสองมีขนาดต่างกันหลาย GB นี่คือตัวอย่าง:
cd /home/myusername/mysimulation1/ # this is the local disk
cp -v traj.trr ~/mysimulation1/
du traj.trr -h
cd ~/mysimulation1/ # this is the fileserver
du traj.trr -h
เอาต์พุตจากการเรียกทั้งสองไปdu -h
เป็นดังนี้ตามลำดับ:
20G traj.trr
28G traj.trr
ฉันเชื่อว่าอดีต (เช่นtraj.trr
ในดิสก์ภายในเครื่อง/home/myusername/mysimulation1/
) เป็นขนาดไฟล์ที่ถูกต้องเนื่องจากเส้นทางการจำลองของฉันคาดว่าจะมีขนาดประมาณ 15 ถึง 20 GB แต่แล้วไฟล์บนเซิร์ฟเวอร์ไฟล์จะมีขนาดใหญ่ขึ้นได้อย่างไร? ฉันสามารถดูว่ามันจะเล็กลงได้อย่างไรถ้าการcp
ถ่ายโอนล้มเหลว แต่ฉันไม่เห็นว่ามันจะใหญ่ขึ้นได้อย่างไร
ฉันได้รับเอาต์พุตที่คล้ายกันเมื่อฉันเรียกใช้คำสั่งเดียวกันกับข้างบน แต่ไม่มี-h
สวิตช์ให้du
:
20717480 traj.trr
28666688 traj.trr
คุณคิดด้วยเหตุผลต่าง ๆ กันไหม?
หากมีโอกาสที่ไม่น่าจะdu
เกิดขึ้นฉันก็โอเคกับเรื่องนั้นได้ แต่ฉันแค่ต้องตรวจสอบให้แน่ใจว่าสำเนาของtraj.trr
บน fileserver นั้นสมบูรณ์และเหมือนกับเวอร์ชั่นต้นฉบับในโลคัลดิสก์ ฉันจำเป็นต้องลบไฟล์โลคัลเพื่อให้มีพื้นที่ดิสก์ในตัวเครื่องเพียงพอที่จะเรียกใช้การจำลองใหม่ แต่ฉันไม่สามารถที่จะมีรุ่นของtraj.trr
ไฟล์เซิร์ฟเวอร์เสียหาย
รูปแบบไฟล์ .trr (จากแพคเกจ Gromacs กลศาสตร์โมเลกุล)เป็นรูปแบบไบนารีไม่ข้อความ diff
ดังนั้นผมไม่แน่ใจว่าถ้าไฟล์ที่สามารถนำมาเปรียบเทียบได้อย่างน่าเชื่อถือโดยโปรแกรมเช่น
md5sum
ไฟล์ทั้งสอง เช็คซัมทั้งสองตรงกัน ดังนั้นฉันเดาว่านี่หมายความว่าทั้งสองไฟล์เหมือนกันหรือไม่
ls -l
ใด คำสั่งdu
รายงานจำนวนพื้นที่บนดิสก์ที่ใช้สำหรับไฟล์ของคุณไม่ใช่ขนาดไฟล์ของคุณ ขนาดของดิสก์จะขึ้นอยู่กับระบบไฟล์และกลยุทธ์การจัดสรรของมัน
ls -l -h
บอกว่าทั้งสองไฟล์มีขนาด 20 GB เช่นเดียวกันls -l
กล่าวว่าทั้งสองไฟล์มีขนาด 21214683940 ไบต์ ดังนั้นฉันคิดว่าไฟล์มีขนาดเท่ากัน แต่อย่าใช้พื้นที่ดิสก์ในปริมาณเท่ากัน (ตามdu
)
md5sum
หรือsha1sum
บนไฟล์ พวกเขาตรงกันหรือไม่