使用硬連結和coreutils的truncate工具shrink大檔案方法一例

chenfeng發表於2018-07-25

一般直接rm大檔案必然會對資料庫伺服器的IO效能造成壓力,因此可以使用coreutils的truncate工具對大檔案進行shrink

該工具安裝方法如下:

#wget

#tar -zxvf coreutils-8.9.tar.gz 

#cd coreutils-8.9

#./configure

#make


實驗如下:

[root@test /data]#du -hs S82.test.sql

907M    S82.test.sql


對目標檔案建立硬連結:

#ln S82.test.sql S82.test.sql.hdlk


[root@test /data]#l *S82*

-rw-r--r--  2 root root 950988446 Apr 28 17:09 S82.test.sql

-rw-r--r--  2 root root 950988446 Apr 28 17:09 S82.test.sql.hdlk



注意  大小為900M左右,因此我們使用coreutils工具集中的truncate命令對大檔案進行shrink,可以寫個指令碼,

內容如下:

#cat truncate.sh 

#!/bin/bash

TRUNCATE=/usr/local/bin/truncate

for i in `seq 900 -10 10 `;  #從900 開始每次遞減10 ,輸出結果見下面

do 

  sleep 2

  echo "$TRUNCATE -s ${i}M /data/S82.test.sql.hdlk"

  $TRUNCATE -s ${i}M /data/S82.test.sql.hdlk

done


開始執行:

./truncate.sh 

/usr/local/bin/truncate -s 900M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 890M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 880M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 870M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 860M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 850M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 840M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 830M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 820M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 810M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 800M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 790M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 780M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 770M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 760M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 750M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 740M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 730M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 720M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 710M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 700M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 690M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 680M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 670M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 660M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 650M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 640M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 630M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 620M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 610M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 600M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 590M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 580M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 570M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 560M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 550M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 540M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 530M /data/S82.test.sql.hdlk

........................................................

........................................................

/usr/local/bin/truncate -s 30M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 20M /data/S82.test.sql.hdlk

/usr/local/bin/truncate -s 10M /data/S82.test.sql.hdlk


shrink收縮後檔案大小為10M左右:

[root@alpha-mongo-140-51 /data]#ll S82*

-rw-r--r-- 2 root root 10485760 Jul 25 13:43 S82.sq_comment.sql

-rw-r--r-- 2 root root 10485760 Jul 25 13:43 S82.sq_comment.sql.hdlk


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2158661/,如需轉載,請註明出處,否則將追究法律責任。

相關文章