ฉันเป็นนักศึกษาระดับบัณฑิตศึกษาสาขาเคมีเชิงคอมพิวเตอร์ที่มีการเข้าถึงคลัสเตอร์ 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บนไฟล์ พวกเขาตรงกันหรือไม่