[20230201]磁碟空間爆滿.txt
[20230201]磁碟空間爆滿.txt
--//今天干了一件"壞"事,導致磁碟空間爆滿.
--//我使用grep -r遞規檢索某個字串.
d:\xxxx> grep -r orcldg *
--//看了一下感覺需要儲存到某個檔案慢慢檢視,執行如下:
d:\xxxx> grep -r orcldg * > xxxx.txt
--//然後內急去了一趟廁所,回來時導致磁碟空間爆滿.因為生成的檔案也在掃描目錄之內,而它的內容還在不斷增加,這樣導致死迴圈.
--//應該改寫如下,在不同目錄生成xxxx.txt檔案:
d:\xxxx> grep -r orcldg * > d:\xxxx.txt
--//實際上這樣的問題不會出現在linux系統裡面.因為在linux下bash shell解析*時並不包括>建立的檔案xxxx.txt
--//即使解析時存在xxxx.txt檔案也沒有問題. > 覆蓋其中內容.
$ grep -r orcldg * > xxxx.txt
--//但是如果這樣執行,可能遇到相似的問題.
$ touch xxxx.txt
$ grep -r orcldg * >> xxxx.txt
$ wc xxxx.txt
16 68 1374 xxxx.txt
--//第1次ok!
$ grep -r orcldg * >> xxxx.txt
--//第2次OK!
--//第3次執行,問題再現!!為什麼我不知道?
$ grep -r orcldg * >> xxxx.txt
--//按ctrl+c
$ wc xxxx.txt
247557 1052116 1963274394 xxxx.txt
--//在linux下bash shell解析*時包括xxxx.txt,一樣會出現磁碟爆滿的情況.
--//我在測試環境遇到奇怪的現象,理論講第2次執行就會出現問題,但是我的測試第3次才會出現.
--//重複演示:
$ >| xxxx.txt
$ grep -r orcldg * >> xxxx.txt
$ wc xxxx.txt
16 68 1374 xxxx.txt
$ grep -r orcldg * >> xxxx.txt
$ wc xxxx.txt
48 204 4266 xxxx.txt
--//檔案大於4K.48行可以這樣理解前面3個檔案輸出16行,xxxx.txt輸出16行,這樣追加32行,正好48行.
--//為什麼這個時候不出現死迴圈不理解.
$ echo xx*
xx1.txt xx2.txt xx3.txt xxxx.txt
$ grep -r orcldg * >> xxxx.txt
^C
$ echo xx*
xx1.txt xx2.txt xx3.txt xxxx.txt
$ wc xxxx.txt
86058 365744 527937706 xxxx.txt
--//不知道是否與掃描順序存在關係與否或者與檔案生成大小有關(大於4K).
--//繼續測試是否與檔案大小相關:
$ >| xxxx.txt
$ grep -r orcldg * >> xxxx.txt
$ wc xxxx.txt
15 59 1262 xxxx.txt
$ grep -r orcldg * >> xxxx.txt
$ wc xxxx.txt
45 177 3921 xxxx.txt
$ echo xx*
xx1.txt xx2.txt xx3.txt xxxx.txt
$ grep -r orcldg * >> xxxx.txt
^C
$ wc xxxx.txt
106270 417990 855715665 xxxx.txt
--//855715665/1024/1024 = 816M,5秒不到生成815G.
--//後記:為什麼第3次出現死迴圈,因為第2次grep -r orcldg * 時,追加xxxx.txt 1262位元組.這樣xxxx.txt共1262*2 = 2524.
--//在掃描xxxx.txt時,僅僅2524位元組先判斷到檔案結束.grep先關閉xxxx.txt的檔案控制程式碼關閉,避免死迴圈的出現.
--//在家裡windows系統上測試:
mkdir testA
cd testA
echo orcldg > xx1.txt
touch xxxx.txt
testA> grep -r orcldg * >> xxxx.txt
testA> wc xxxx.txt
1 1 15 xxxx.txt
testA> grep -r orcldg * >> xxxx.txt
testA> wc xxxx.txt
3 3 54 xxxx.txt
testA> grep -r orcldg * >> xxxx.txt
testA> wc xxxx.txt
7 7 150 xxxx.txt
--//你可以發現就是看看那個先執行完成,如果grep 掃描xxxx.txt先完成,關閉控制程式碼.就不會出現死迴圈.
--//但是如果xxxx.txt檔案大於一定程度,一定會出現死迴圈.
testA> grep -r orcldg * >> xxxx.txt
testA> wc xxxx.txt
15 15 378 xxxx.txt
testA> grep -r orcldg * >> xxxx.txt
testA> wc xxxx.txt
31 31 906 xxxx.txt
testA> grep -r orcldg * >> xxxx.txt
testA> wc xxxx.txt
63 63 2106 xxxx.txt
testA> grep -r orcldg * >> xxxx.txt
testA> wc xxxx.txt
127 127 4794 xxxx.txt
testA> grep -r orcldg * >> xxxx.txt
^C
testA> wc xxxx.txt
61054 61054 133067193 xxxx.txt
--//如果在cygwin下測試:
mkdir testA
cd testA
echo orcldg > xx1.txt
touch xxxx.txt
$ grep -r orcldg * >> xxxx.txt
grep: input file 'xxxx.txt' is also the output
$ wc xxxx.txt
1 1 15 xxxx.txt
$ grep -r orcldg * >> xxxx.txt
grep: input file 'xxxx.txt' is also the output
$ wc xxxx.txt
2 2 30 xxxx.txt
--//會報grep: input file 'xxxx.txt' is also the output,避免出現死迴圈問題.
--//不知道linux新的bash版本修復這個問題了沒有.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2934652/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 伺服器磁碟空間滿了伺服器
- [20211029]udump磁碟空間暴漲.txt
- [20201104]磁碟空間消耗在哪裡.txt
- sysaux 表空間爆滿處理方法UX
- Linux磁碟空間佔滿問題快速排雷Linux
- 使用Vagrant 後發現虛擬機器磁碟空間爆滿的血淚填坑記虛擬機
- Linux空間不足怎麼辦?磁碟滿了如何清理?Linux
- ASM空間爆滿導致資料庫掛起ASM資料庫
- 磁碟空間不足
- docker引起伺服器磁碟爆滿Docker伺服器
- Linux空間不足怎麼辦?Linux磁碟滿了怎麼清理?Linux
- 解決docker容器存放目錄磁碟空間滿了問題Docker
- MySQL 磁碟空間滿導致表空間相關資料檔案損壞故障處理MySql
- 如何檢查Mac磁碟空間,mac磁碟空間其他怎麼清理Mac
- win10 如何修改磁碟空間 win10修改磁碟空間方法Win10
- Oracle 擴充磁碟空間Oracle
- Linux 離奇磁碟爆滿解決辦法Linux
- ubuntu 擴充套件磁碟空間Ubuntu套件
- docker磁碟空間清理辦法Docker
- windows10磁碟空間不足怎麼清理_win10磁碟空間清理的方法WindowsWin10
- WSL 回收未使用的磁碟空間
- ORACLE ASM磁碟組空間溢位OracleASM
- lsof |grep deleted 釋放磁碟空間delete
- 沒有磁碟空間 No space left on devicedev
- linux檢視剩餘磁碟空間Linux
- vagrant建立centos7後虛擬機器磁碟爆滿CentOS虛擬機
- ubunt下boot檔案空間滿boot
- ORACLE ASM的SSD磁碟空間回收分析OracleASM
- linux檢視mysql佔用磁碟空間LinuxMySql
- Linux 磁碟掛載和swap空間管理Linux
- PHP 獲取伺服器磁碟空間PHP伺服器
- 檢視佔用磁碟空間的程式
- MySQL 可以壓縮或回收磁碟空間嗎MySql
- 檢視磁碟使用空間和檔案大小
- Linux檢查Docker映象,容器的磁碟空間LinuxDocker
- 學習下Linux 如何檢視磁碟空間Linux
- Linux磁碟爆滿無法進入圖形化介面解決方法Linux
- HP-UX上一次Oracle軟體安裝目錄磁碟空間滿導致的故障UXOracle