乾貨|Linux中限制目錄佔用空間
點選上方“中興開發者社群”,關注我們
每天讀一篇一線開發者原創好文
背景
系統執行過程中,一些程式會向硬碟中寫入大量的資料,如果寫入的資料量不做控制,總有一天硬碟會被寫滿,導致一些奇奇怪怪的問題。
為了避免硬碟被寫滿,一般情況下我們需要監控指定的目錄中檔案總大小,如果超出大小則做刪除處理,這種方式麻煩點在於需要建立一個守護程式專門守護目錄,實時或者定時統計目錄中所有檔案的大小,這種方式下,守護程式會佔用很多CPU時間,影響系統效能。
另外一種思路就是使用記憶體盤或者檔案盤,將記憶體或者檔案對映為一個獨立的檔案系統,將此檔案系統掛載到指定目錄,當使用者向此目錄寫入資料時,會被嚴格限制在指定的大小。考慮到資料需要持久化,這裡用檔案對映磁碟的方式。
檔案對映
建立檔案盤
首先我們需要建立一個檔案,作為該檔案系統的宿主(類似於ISO檔案),接著把該檔案作為磁碟使用,在此檔案上建立檔案系統。
需要注意的是,Linbux中mkfs命令只能在塊裝置上執行,而檔案不能直接作為塊裝置,這個矛盾需要解決,幸好系統中提供了一種“偽裝置”功能,可以將一個裝置和檔案關聯起來,訪問此偽裝置時實際訪問的就是關聯的檔案(ISO檔案就是一個很好的範例),有了這種辦法,我們就可以在執行格式化前將檔案通過losetup命令對映為指定裝置,然後針對此裝置操作即可。
建立檔案系統
範例建立一個50M的檔案,並將此檔案系統格式化為Ext3格式;
dd if=/dev/zero of=file.disk bs=1M count=50
losetup /dev/loop100 file.disk
mkfs.ext3 /dev/loop100
losetup -d /dev/loop100
掛載檔案系統
接著將此檔案mount到本機的一個目錄中(工作目錄為/home/hxg/test/disk):
cd /home/hxg/test/disk
mount -o loop file.disk mhere/
用df命令看下當前系統上的磁碟,發現多出來一個/dev/loop2裝置,此裝置掛載到了/home/hxg/test/disk/mhere目錄上:
[root@hxg33 disk]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/ncl-root 11397120 2428540 8968580 22% /
/dev/loop2 45478 827 42091 2% /home/hxg/test/disk/mhere
如何確定/dev/loop2裝置就是我們剛剛建立的file.disk檔案呢?使用losetup檢視,可以看到該裝置指向的檔案為/home/hxg/test/disk/file.disk:
[root@hxg33 disk]# losetup -l loop2
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop2 0 0 1 0 /home/hxg/test/disk/file.disk
驗證
建立一個30MB的檔案,建立成功:
[root@hxg33 mhere]# dd if=/dev/zero of=file.disk bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.144564 s, 218 MB/s
接著再建立一個30MB的檔案,建立失敗,原因是磁碟滿了:
[root@hxg33 mhere]# dd if=/dev/zero of=file1.disk bs=1M count=30
dd: error writing ‘file1.disk’: No space left on device
14+0 records in
13+0 records out
14082048 bytes (14 MB) copied, 1.69731 s, 8.3 MB/s
總結
通過檔案對映磁碟的方式,然後將此虛擬磁碟對映到指定目錄,我們就能很好的保證此目錄空間能夠很好的限制住。不足就是在建立檔案磁碟的時候,就已經預先指定了大小並分配了空間。
但無論如何,此方法能完全杜絕硬碟寫爆的風險。
擴充閱讀
相關文章
- linux下找出佔用空間最大的目錄Linux
- linux 列出一個目錄佔用的空間 du (轉)Linux
- Oracle的home目錄空間佔用異常處理Oracle
- Linux如何檢視目錄佔用空間大小?常用命令是什麼?Linux
- 怎麼樣linux下的目錄名的目錄,系統用來操作空間Linux
- linux檢視mysql佔用磁碟空間LinuxMySql
- LINUX檢視目錄剩餘空間的命令Linux
- Linux伺服器目錄空間不足解決措施Linux伺服器
- 檢視linux系統硬碟目錄佔用大小Linux硬碟
- Centos Linux 清理磁碟佔用空間:/dev/xvda1CentOSLinuxdev
- linux查詢佔用空間較大的檔案Linux
- undo表空間佔用磁碟空間滿案例處理
- 如何使Xcode佔用更少的空間 Xcode佔用空間太大解決方法XCode
- Linux中各資料夾所佔空間大小技巧Linux
- MacPro系統佔用空間太大Mac
- AWR佔用sysaux表空間太大UX
- Oracle檢視物件佔用空間Oracle物件
- Linux檢視磁碟目錄記憶體空間使用情況Linux記憶體
- ubuntu重新分配根目錄儲存空間-將根目錄空間縮小騰出給別的位置Ubuntu
- 【Linux】/var/spool/clientmqueue 佔滿根目錄LinuxclientMQ
- 小乾貨~ NFS在Linux系統中的應用NFSLinux
- 檢視佔用磁碟空間的程式
- 乾貨分享|優炫資料庫管理之表空間資料庫
- 【SQLServer】Tempdb空間異常增長,空間佔用非常大SQLServer
- 得到表的記錄數和佔用的儲存空間指令碼指令碼
- RAC環境中cdata資料夾佔用太多磁碟空間
- centos Linux 統計某個資料夾佔用空間大小CentOSLinux
- Oracle 安裝目錄空間不夠處理Oracle
- 歸檔目錄空間不足造成的問題
- aix 中SMITTY LV 操作的詳細步驟擴充目錄空間AIMIT
- VMware虛擬機器Linux系統根目錄空間擴充操作虛擬機Linux
- SQL Server 檢視錶佔用空間大小SQLServer
- Linux磁碟空間佔滿問題快速排雷Linux
- Linux技巧--檢視檔案及資料夾佔用空間大小Linux
- Linux系統中net目錄有什麼用?Linux
- Linux 許可權管理之目錄許可權限制Linux
- 【乾貨】Linux中presto作用是什麼?LinuxREST
- PostgreSQL DBA(190) - 行大小和空間佔用SQL