ลดขนาด / รีเซ็ตขนาดไดเรกทอรี?


11

มีวิธีย่อรายการไดเรกทอรีหรือไม่?

ไดเรกทอรี maildir ของ dovecot ของฉันมีขนาดเพิ่มขึ้นจากค่าเริ่มต้น 4096เป็นหลายเมกะไบต์และมันยุ่งกับโควต้าดิสก์

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

แก้ไข: สำหรับลูกหลานเพื่อค้นหา dirents> 4096:

 find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr

คำตอบ:


6

ดูเพิ่มเติมrm ในไดเรกทอรีที่มีนับล้านของไฟล์ ; มีความเกี่ยวข้องกันตามสัมผัส แต่เราคุยกันที่นั่น

เท่าที่ฉันทราบอย่างน้อยก็ใน ext2 / 3 ไม่มีไม่มีทาง (ออนไลน์) ที่จะทำให้พวกเขาสั้นลงจากการลบ + สร้างใหม่ Unmounted หลายแหล่งแนะนำe2fsck -Dอาจใช้ได้แม้ว่าฉันจะไม่สามารถอ้างสิทธิ์ในประสบการณ์ส่วนตัวกับตัวเลือกนั้นได้

อ้างอิงบางอย่างสำหรับการอ่านเพิ่มเติม:


1
ลิงค์แรกมีประโยชน์อย่างยิ่ง: มันแก้ไขปัญหาของฉันโดยเฉพาะ (เซิร์ฟเวอร์อีเมล) และความจริงที่ว่า Ted Tso ชั่งน้ำหนักในบทสนทนานั้นยอดเยี่ยมมาก;)
mikewaters

3

ฉันเพิ่งต้องลบและสร้างไดเรกทอรี NFS ใหม่เพื่อลดขนาดไฟล์หลังจากที่มันขยายขนาดก่อนหน้านี้ ในกระบวนการนี้ฉันพบวิธีที่มีประสิทธิภาพในการทำเช่นนี้โดยใช้ rsync และฮาร์ดลิงก์ วิธีนี้หลีกเลี่ยงการคัดลอกไฟล์จริงในขณะที่ยังคงบรรลุเป้าหมายในการสร้างไดเรกทอรีใหม่ด้วยเนื้อหาเดียวกัน

เนื่องจากเราจำเป็นต้องหยุดทำงานเพื่อดำเนินการนี้ในช่วงเวลาการบำรุงรักษาทำให้การสร้างไดเรกทอรีที่สร้างใหม่โดยเร็วที่สุดเป็นสิ่งสำคัญสำหรับเรา หากความเรียบง่ายสำคัญสำหรับคุณมากขึ้นให้เปลี่ยนคำสั่ง move แรกเป็น 'rm -rf' บนไดเรกทอรีต้นทางและข้ามคำสั่ง 'rm -rf' อื่น ๆ

ฉันแยกคำสั่งเหล่านี้ออกจากกระบวนการที่ใหญ่ขึ้นและสรุปชื่อไดเรกทอรีดังนั้นขอโทษถ้าฉันทำผิดพลาดในการแปลนั้น

mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/

จากนั้นเราจะลบไดเรกทอรีออก คุณอาจต้องใช้เทคนิคที่ซับซ้อนกว่านี้เพื่อทำสิ่งนี้ทั้งนี้ขึ้นอยู่กับขนาด ตัวอย่างเช่นการใช้ rsync กับ --delete flag เพื่อซิงค์ไดเรกทอรีว่างในไดเรกทอรีนี้อาจมีประสิทธิภาพมากกว่า

rm -rf /tmp/deleteme/

2

ฉันทำแบบนี้

cp -aloldir newdir && mvolddir tempname && mvnewdir olddir && rm -rtempname

โดยที่olddirเป็นไดเรกทอรีที่คุณต้องการลดขนาด newdirและtempnameเป็นชื่อไฟล์ชั่วคราว

cp -alสร้างลิงก์ไปยังเนื้อหาของolddirในnewdir และคำสั่งสามคำสั่งต่อไปสลับกับ newdir และล้างข้อมูล


เนียน. ไม่เคยรู้เกี่ยวกับ cp -l
Kevin Buchs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.