วันพฤหัสบดีที่ 25 สิงหาคม พ.ศ. 2554

ขอคืนพื้นที่ /var/log โดยการ compress log ด้วย xz

xz คล้ายๆ gzip แต่ compress ด้วยอัลกอริทึ่ม lzma2 มีใน squeeze ขึ้นมา หรือใน lenny-backports ดูเพิ่มเติมที่ http://tukaani.org/xz/


ทำไมต้องใช้ xz แทน gzip
  • บีบได้เยอะกว่ามาก พอเอามาใช้บีบ log เก่าที่ถูก rotate ทำให้ใช้พื้นที่น้อยลงมาก
  • ตอน decompress ทำได้ค่อนข้างเร็ว ช้ากว่า gunzip บ้าง แต่เร็วกว่า bunzip2 มาก
ข้อเสีย?
  • ใช้เวลา compress นานกว่ามาก เพราะใช้กำลังในการประมวลผลเยอะ (+ram เยอะๆ) แต่มันทำครั้งเดียว และก็ cpu กับ ram ไม่น่าเป็นปัญหากับ server ในปัจจุบันนัก ส่วนการอ่าน/นำไปใช้ก็มี xzcat, xzless ให้ เร็วใกล้เคียงกับ zcat, zless เลยทีเดียว
ติดตั้ง
# apt-get install xz-utils
# apt-get install xz-lzma   

เทียบคำสั่ง
gzip : xz
gunzip : unxz
zcat : xzcat
zless : xzless
zmore : xzmore
zgrep : xzgrep
zdiff : xzdiff
zcmp : xzcmp
zegrep : xzegrep

การประยุกต์ใช้กับ logrotate เพื่อขอคืนพื้นที่ใน /var/log
เพิ่มบรรทัดต่อไปนี้เข้าไปใน /etc/logrotate.conf
#---------------------------------
compresscmd /usr/bin/xz
uncompresscmd /usr/bin/unxz
compressext .xz
compressoptions -9
#---------------------------------

การแปลงจาก log เก่าที่เป็น .gz มาเป็น .xz
แปลงไฟล์เดียว
# gunzip access.log.2.gz
# xz -9 access.log.2

แปลงหลายๆ ไฟล์
# cd /var/log
# find . -name "*.gz" | sed 's/.gz$//' | xargs -I '{}' -n 1 -P 2 sh -c "gunzip '{}'.gz ; xz -9 '{}'"

* หมายเหตุ ตรง -P 2 นั่นคือทำพร้อมๆ กัน 2 process ถ้า cpu มีหลายๆ core ก็เพิ่มมากกว่านี้ได้ตามความเหมาะสม จะทำให้แปลงได้ไวขึ้น

ปล. คัดลอกมาจาก note เก่าใน Facebook ของผมเอง

ไม่มีความคิดเห็น :

แสดงความคิดเห็น