[root@iZ25zpeock2Z orbit-oracle]# cd /
[root@iZ25zpeock2Z /]# du -cks * |sort -nr|head -n 20
du: cannot access `proc/3493/task/3493/fd/4': No such file or directory
du: cannot access `proc/3493/task/3493/fdinfo/4': No such file or directory
du: cannot access `proc/3493/fd/4': No such file or directory
du: cannot access `proc/3493/fdinfo/4': No such file or directory
73276804 total
50757720 u01
14097384 app
3020812 var
2569672 dev
2313092 usr
195792 home
157936 lib
58780 tmp
31408 etc
26012 lib64
24072 boot
14436 sbin
7792 bin
1316 opt
524 root
24 logs
16 lost+found
4 srv
4 selinux
[root@iZ25zpeock2Z /]#php
=======================html
[root@iZ25zpeock2Z orbit-oracle]# du -sh
58M .
[root@iZ25zpeock2Z orbit-oracle]# pwd
/tmp/orbit-oracle
[root@iZ25zpeock2Z orbit-oracle]# cd linc-
Display all 1185524 possibilities? (y or n)
[root@iZ25zpeock2Z orbit-oracle]# ll -t|more
total 0
srwxr-xr-x 1 oracle oinstall 0 Nov 17 23:53 linc-6f4b-0-35a89aa23d845
srwxr-xr-x 1 oracle oinstall 0 Nov 17 23:53 linc-6f3a-0-6c4d1ee3e33a
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:21 linc-3339-0-3f0ac0673c47a
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:21 linc-3326-0-4246a0fc3d870
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:21 linc-330d-0-5d91d1ca3f328
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-3302-0-116242933f446
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-32ef-0-bb2fe8b3f315
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-32de-0-1c0964f13f39f
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-32d3-0-5099db553d45c
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-32c0-0-56b10d0e3defa
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-32af-0-11e006e03f7ca
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-32a4-0-1f6c7f673f6e0
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-3291-0-420722403d065
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-3280-0-18ff6bbf40083
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-3275-0-73da1223d382
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-3257-0-42df66103d86e
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:20 linc-324b-0-3bbf2ed3d087
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-323e-0-229e9c753fb32
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-3225-0-ac223993eeaa
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-321a-0-273bc32240646
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-320f-0-6614565f3e3ba
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-31f6-0-16ad868f3d970
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-31eb-0-7089e6fe3f814
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-31e0-0-6cf307e140f7c
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-31c5-0-42cf32aa3eb83
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-31ba-0-16ffe4423ebb5
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-31af-0-586a1bf43d7ae
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-3195-0-3d227bb3d14d
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:19 linc-318a-0-5851d793e75f
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-317c-0-55d7993e3f476
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-3161-0-188802a83efb4
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-3156-0-cc079383e7f6
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-313f-0-14097e6a3c973
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-3128-0-7305d9673d0b2
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-311d-0-25cc2d503ef19
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-310c-0-648c7cf83dc58
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-30f9-0-740f906f3e637
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-30ee-0-76a59c4a3d03e
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-30d8-0-73950d123d7d6
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-30bf-0-16e6e68c3df70
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:18 linc-30b0-0-370bc6693e109
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-309d-0-35bd874406fc
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-308a-0-4cdb7a103eb7a
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-307f-0-3be4306f407d5
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-306e-0-51edd97a3dba9
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-305b-0-6a40b9033e11c
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-3050-0-42e665513eaff
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-303f-0-2b7fdde93fdf7
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-302c-0-4921dcc13dede
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-301b-0-777c1eb93e98e
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-3010-0-2e803d213de8b
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-2ffd-0-62fbb54c3d3dc
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:17 linc-2fec-0-4c5c94313d9bc
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2fe1-0-7a206d603ea76
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2fce-0-667b24263f813
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2fbd-0-6be877653f3a3
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2fb2-0-38ab82e13db4e
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2f9f-0-5814c553d033
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2f8e-0-7aae99a03ea84
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2f83-0-491c6dee3f716
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2f5b-0-6f67a5a4069e
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2f4a-0-4863854f3f06e
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2f39-0-2536a7733e1d8
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2f26-0-7806b9c23dc74
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:16 linc-2f14-0-217e566a40359
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:15 linc-2f09-0-30fcc440402cc
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:15 linc-2ef0-0-3bf3be7e3d5e3
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:15 linc-2ee5-0-51eeef693e782
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:15 linc-2eda-0-29fd520b3da59
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:15 linc-2ec1-0-53f77a9e3d40d
srwxr-xr-x 1 oracle oinstall 0 Nov 17 06:15 linc-2eb6-0-aebd8dc3f79bvue
[root@iZ25zpeock2Z orbit-oracle]# ls |wc -l
1185524
[root@iZ25zpeock2Z orbit-oracle]# rm -f *
-bash: /bin/rm: Argument list too long
[root@iZ25zpeock2Z orbit-oracle]# pwd
/tmp/orbit-oracle
[root@iZ25zpeock2Z orbit-oracle]# ls |wc -l
1185524
[root@iZ25zpeock2Z orbit-oracle]# ls |xargs rm -f *
-bash: /usr/bin/xargs: Argument list too long
[root@iZ25zpeock2Z orbit-oracle]# ls |wc -l
1185524
[root@iZ25zpeock2Z orbit-oracle]# find . -name "*" | xargs rm -rf '*'
rm: cannot remove directory: `.'
^C
[root@iZ25zpeock2Z orbit-oracle]# ls |wc -l
1035696
[root@iZ25zpeock2Z orbit-oracle]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 1310720 1161190 149530 89% /
tmpfs 1007257 738 1006519 1% /dev/shm
/dev/xvdd1 19660800 45404 19615396 1% /u01
/dev/xvdc1 9830400 12 9830388 1% /logs
/dev/xvdb1 3276800 10559 3266241 1% /app
[root@iZ25zpeock2Z orbit-oracle]# find . -name "*" | xargs rm -rf '*'
rm: cannot remove directory: `.'
^C
[root@iZ25zpeock2Z orbit-oracle]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 1310720 751189 559531 58% /
tmpfs 1007257 738 1006519 1% /dev/shm
/dev/xvdd1 19660800 45404 19615396 1% /u01
/dev/xvdc1 9830400 12 9830388 1% /logs
/dev/xvdb1 3276800 10560 3266240 1% /app
[root@iZ25zpeock2Z orbit-oracle]# ls |wc -l
625698
[root@iZ25zpeock2Z orbit-oracle]#java
===============================node
http://hi.baidu.com/cpuramdisk/item/5aa49ce00c0757aecf2d4f24linux
四種解決」Argument list too long」參數列表過長的辦法
在linux中刪除大量文件時,直接用rm會出現:-bash: /bin/rm: 參數列表過長,的錯誤。
這時能夠用find命令來結合使用。
例:
一、rm * -rf 改成:
find . -name "*" | xargs rm -rf '*' 就好了。
二、rm test* -rf 改成:
find . -name "test*" | xargs rm -rf "test*"web
mv時報參數列表過長,shell
for i in *.m;do mv $i ${i%.m};done數據庫
因而求助於google,探索過程就省略了,直接說解決方法吧:bash
ls dir1 | xargs -t -I {} mv {} dir2/{}
這裏的一對大括號是原文給的例子裏用的,後來看了參數的用法,其實那對大括號是能夠用任意字符串替換的,好比:
ls dir1 | xargs -t -I asdf mv asdf dir2/asdf
效果和大括號那一版是徹底同樣的,就是看起來有點兒不嚴肅。
須要說明的是,上面xargs的第二個參數,是大寫的i,讀做」愛「的那個字母,不是小寫的L。至於參數的含義嘛,我忘了。
Linux下 報錯「命令參數列表過長」,在用mv命令一次移動3萬多個文件時失敗了,原始命令相似這樣:」mv $(ls dir1) dir2「。錯誤提示的中心思想是:」你這參數也太TM多了吧「。
按照LZ想法大概能夠這麼作:find /dir1/ -maxdepth 1 | xargs -i mv {} /dir2/
若是參數過長,使用tar比較簡單
tar -C /dir1/ -cf - . | tar -xf - -C /dir2/
因而求助於google,探索過程就省略了,直接說解決方法吧:
ls dir1 | xargs -t -I {} mv {} dir2/{}
這裏的一對大括號是原文給的例子裏用的,後來看了參數的用法,其實那對大括號是能夠用任意字符串替換的,好比:
ls dir1 | xargs -t -I asdf mv asdf dir2/asdf
效果和大括號那一版是徹底同樣的,就是看起來有點兒不嚴肅。
須要說明的是,上面xargs的第二個參數,是大寫的i,讀做」愛「的那個字母,不是小寫的L。至於參數的含義嘛,我忘了。
另外4種方法
做爲一個linux用戶/系統管理員, 有些時候你會遇到如下錯誤提示:
[user@localhost foo]$ mv * ../foo2
bash: /bin/mv: Argument list too long
「Argument list too long」參數列表過長錯誤常常發生在用戶在一行簡單命令中提供了過多的參數而致使,常常在ls *, cp *, rm * 等中出現。
根據問題的緣由如下提供了四種方法,能夠根據本身的狀況酌情選用
方法1 : 將文件羣手動劃分爲比較小的組合
e.g 1:
[user@localhost foo]$ mv [a-l]* ../foo2
[user@localhost foo]$ mv [m-z]* ../foo2
這是最基本的方法,只是簡單的使參數數量符合要求,這種方法應用範圍有限,只適用於文件列表中的名字分佈比較均勻,另外這也是個初級用戶能夠考慮的解決方案,不過須要不少重複命令和對文件名分佈的觀察與猜想。
方法2 : 使用find命令
e.g 2:
[user@localhost foo]$ find $foo -type f -name '*' -exec mv {}$foo2/. \;
方法2經過find命令,將文件清單輸出到mv命令,使其一次處理一個,這樣就徹底避免了過量參數的存在,另外經過不一樣的參數,能夠指定除了名稱之外的時間戳,權限,以及inode等匹配模式。
方法2的缺點在於比較耗費時間。
方法3 : 建立shell函數
e.g 3.1:
function huge_mv ()
{whileread line1; do
mv foo/$line1 ../foo2
done
}
ls -1 foo/ | huge_mv
寫一個shell函數並不涉及到某種程度的複雜性, 這種方法比方法1和方法2相比更加靈活。
下面咱們來擴展一下例3.1 :
e.g 3.2:
function huge_mv ()
{whileread line1; do
md5sum foo/$line1 >> ~/md5sums
ls -l foo/$line1 >> ~/backup_list
mv foo/$line1 ../foo2
done
}
ls -1 foo/ | huge_mv
相比例3.1,例3.2生成了文件的md校驗散列文件和名字備份,符合給本身留條後路的哲學。
另外能夠根據本身的須要無限制的擴展功能。
方法4 : 終極解決方案,從新編譯內核
首先使用這個方案以前要謹慎,由於涉及到修改內核源代碼,在生產環境中仍是要斟酌一下並作好測試。
另外,這個方法是從根本上解決的,一勞永逸的
這也是開放源碼的好處之一
首先在內核源碼中找到 include/linux/binfmts.h文件 ,搜索到如下字段:
/*
* MAX_ARG_PAGES defines the number of pages allocated for arguments
* and envelope for the new program. 32 should suffice, this gives
* a maximum env+arg of 128kB w/4KB pages!
*/
#define MAX_ARG_PAGES 32
修改 MAX_ARG_PAGES數值爲 64 或者更高便可完善的解決參數受限問題。
而後 從新編譯並啓用新內核便可。
================================
http://blog.csdn.net/iefreer/article/details/6124761
http://www.ttlsa.com/linux/no-space-left-on-device/
一. 收到報警
線上有一臺服務器磁盤檢測告警了,提示空間不足。爬到服務器查看相關信息:
/data分區只使用了71%,建立文件卻提示磁盤空間不足,按理說不會出現這種狀況的。難道inode耗盡?
二. 分析緣由
查看/data分區inode使用狀況相關信息以下:
果不其然,IUse%=100%,致使沒法建立文件。
在linux系統下,硬盤被分區格式化後,包含inode和block,inode是用來記錄文件的大小,物理地址,屬主,屬組,讀寫權限,時間戳,被硬連接的次數等等元數據的。block是用來存儲數據的。正由於這種文件系統結構,在linux下,除了剩餘磁盤空間以外,還要剩餘inode才行,二者缺一不可的。可經過dumpe2fs -h /dev/sdb1或tune2fs -l /dev/sdb1 來查看最大inode數和inode大小。一旦文件系統建立後,每一個分區的可用inode數沒法動態的進行調整,除非從新格式化。
三. 查找緣由並解決
/data是線上業務數據目錄,各類站點、日誌、臨時文件存放目錄。其中有個程序產生大量的小文件形成的。可經過下面的命令找出佔用空間最多的文件或目錄:
# du -cks * | sort -nr | head -n 20 |
刪除部分文件,釋放inode。
如需轉載請註明出處:No space left on device http://www.ttlsa.com/html/2066.html
===========
http://www.zijidelu.org/thread-46862-1-1.html
看到這個錯誤,第一個反應是磁盤空間滿了;但 df 一看,每一個分區的空間都還富餘的很。從 munin 的監控圖表上看 Filesystem usage 也很平穩,但下面的 Inode usage 就有問題了,其中一個分區的 usage 已經到了100%。趕忙跑到服務器上 df -i 檢查,果真是 Inode 耗盡。原來這個分區是用來扔各類日誌和臨時文件的,其中有某個程序產生的臨時文件又小又多,又沒有進行定時回滾,形成在磁盤空間耗盡以前文件系統的 Inode 就被用光了。
Linux/Unix like OS 的文件系統中每一個目錄樹中的節點並非像 Windows 那樣直接包含文件的具體信息,而只包含了文件名和 Inode number 。經過 Inode number 所找到對應於文件名的 Inode 節點中才真正記錄了文件的大小/物理地址/全部者/訪問權限/時間戳/被硬連接的次數等實際的 metadata 。所以你能夠在 Linux 系統中經過硬連接( hard link ) 的方式給某個文件建立無數個位於不一樣目錄下的文件名,而實際的文件數據只須要一份拷貝。
但也正由於這種文件系統的結構,當你在 Linux 中進行 IO 操做的時候,須要的資源除了磁盤空間之外,還要有剩餘的 Inode 才行。缺省狀況下, Linux 在系統安裝過程當中按照1個 Inode 對應 2k 磁盤空間來計算每一個分區的最大 Inode 數。一旦文件系統建立以後,每一個分區可用 Inode 數就沒法進行動態調整。
正常來講,通常不太會出現某個分區的 Inode 耗盡而磁盤空間尚餘的狀況,除非像我碰到的這樣垃圾小文件瘋長而又沒進行有效的清理。但若是確實須要的話,能夠在建立文件系統(好比用 mke2fs )的時候根據實際須要來調整這個參數(好比分區若是用於存放超大視頻文件的話 Inode 的數量能夠少一些;若是打算存放的文件是大量小於 2k 的迷你文件的話就要考慮多建立一些 Inode)。
其它人碰到的 No space left on device 緣由:
超出系統中同時運行的最大 message queue 個數限制 : 在 root 下用 sysctl kernel.msgmni 檢查該參數,sysctl -w kernel.msgmni=XXX 從新設定便可。
WARN internal.ParameterParserImpl - Upload failed
com.alibaba.service.upload.UploadException: Processing of multipart/form-data request failed. /tmp/upload_64f22eb1_113e12038a1__7fe6_00000000.tmp(No space left on device)
at com.alibaba.service.upload.DefaultUploadService.parseRequest(DefaultUploadService.java:170)
at com.alibaba.webx.request.context.parser.internal.ParameterParserImpl.parseUpload(P
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 4.9G 2.2G 2.4G 48% /
/dev/sda1 99M 12M 83M 12% /boot
none 2.0G 0 2.0G 0% /dev/shm
/dev/sda7 119G 45G 69G 40% /home
/dev/sda3 4.9G 3.9G 685M 86% /usr
/dev/sda5 2.9G 138M 2.6G 5% /var
[admin@b2bsearch211 logs]$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 640000 640000 0 100% /
/dev/sda1 26104 38 26066 1% /boot
none 218174 1 218173 1% /dev/shm
/dev/sda7 15826944 147888 15679056 1% /home
/dev/sda3 640000 147367 492633 24% /usr
/dev/sda5 384000 3210 380790 1% /var
df -i 能夠看到Inode節點已經滿了。
經過刪除大量的小文件得以解決。
inode 是 UNIX 操做系統中的一種數據結構,其本質是結構體,它包含了與文件系統中各個文件相關的一些重要信息。在 UNIX 中建立文件系統時,同時將會建立大量的 inode 。一般,文件系統磁盤空間中大約百分之一空間分配給了 inode 表。 有時,人們使用了一些不一樣的術語,如 inode 和索引編號 (inumber)。這兩個術語很是類似,而且相互關聯,但它們所指的並非一樣的概念。inode 指的是數據結構;而索引編號其實是 inode 的標識編號,所以也稱其爲inode 編號 或者索引編號。索引編號只是文件相關信息中一項重要的內容。下一個部分將介紹 inode 中的其餘一些屬性。 inode 表包含一份清單,其中列出了對應文件系統的全部 inode 編號。當用戶搜索或者訪問一個文件時,UNIX 系統經過 inode 表查找正確的 inode 編號。在找到 inode 編號以後,相關的命令才能夠訪問該 inode ,並對其進行適當的更改。 例如,使用 vi 來編輯一個文件。當您鍵入 vi <filename> 時,在 inode 表中找到 inode 編號以後,才容許您打開該 inode 。在 vi 的編輯會話期間,更改了該 inode 中的某些屬性,當您完成操做並鍵入 :wq 時,將關閉並釋放該 inode 。經過這種方式,若是兩個用戶試圖對同一個文件進行編輯, inode 已經在第一個編輯會話期間分配給了另外一個用戶 ID (UID),所以第二個編輯任務就必須等待,直到該 inode 釋放爲止。 |
1. inode 是做甚麼的? 一個 filesystem 能夠粗略地分紅 inode table 與 data area 兩部份. inode table 上有許多的 inode, 每一個 inode 分別 記錄一個檔案的屬性, 與這個檔案分佈在哪些 datablock 上 2. 一個 inode 有多大呢? 128 byte! 3. inode 和 data area 的關係 在 new filesystem 時, 一般會有一個參數, 用來描述要分配多少比例的空間給 inode table. 舉例來講, newfs -i 2048 是指 file system 中, 每分配 2048 byte 給 data area, 就分配一個 inode 可是一個 inode 就並非必定就用掉 2048 byte, 也不是說 files allocation 的最小單位是 2048 byte, 它僅僅只是表明 filesystem 中 inode table/data area 分配空間的比例是 128/2048 也就是 1/16 (換個角度想, 咱們能夠想成是預估 filesystem 中 file 平均大小是 2048 byte) 若是 inode table 過小, 那麼在每一個檔案都很小的時候, 就會發生 inode 用光 而 datablock 還剩一堆的情形. 4. file allocation 的最小單位 和 inode 多少有沒有關係呢? 沒有關係! FFS 中真正的最小單位是 fragment size 也就是咱們在 new filesystem 時用的 newfs -b 8192 -f 1024 ^^^^^^^^ ps: -b 8192 表明 blocksize=8192, 這種"較大單位"是用來加速大檔案的存取用的 在 FreeBSD 中, 內定的是 -i 4096 -b 8192 -f 1024. 若是您要架 bbs/new 的話 能夠考慮用 -i 1024 -b4096 -f1024 unixer ============================================================================ From: alexj@mail.tmc.edu.tw (Ji, Wen-Jie) Newsgroups: tw.bbs.comp.386bsd Subject: Re: HELP !! The parameter of newfs Date: Thu, 12 Dec 1996 01:39:31 GMT 不要緊,我本身找到答案了,寫在此讓你們分享一下. 所謂 block size & fragment size, 這是屬於 file system 的一種解決方案. 自4.3 BSD, BSD 用這種方法來解決檔案 fragment 的問題 先假設 a block size= 4K, a fragment size = 256Bytes. 假如你如今要將一個 1K 的新檔案寫入 file system, FS 會把它存入 4 個fragment,而不會存入 block,一但這個檔案繼續被 append 增長到 4K 時, FS 會將它轉存到一個 block中, 而原來的 16 個fragments 就會被 clean ^^^^^^^^^^^^^^^^^^^^ 由於當你的檔案大到 4K 時,它佔用 了 16 (4K / 256 bytes) 個 fragments 再舉個例子, 若是如今又存了一個新的 4.1K 的檔案, FS 會分配 一個 block 及 4個 fragment 給 這個檔案, 由於 1 block + 4 fragments = 4 K + 256 bytes * 4 = 4.1K 因此,有此可知,對於一臺 news server, bbs, 或是會有大量的小檔案存取時, 爲了下降 FS 的空間耗損率,應該採用 -b 4096 -f 256, 而不要採用預設值的 -b 8192 -f 1024,由於大部分的信件都不超過 512 bytes, 有些更不超過 256 bytes, 可是這樣可能會下降存取的速度.但我相信不嚴重 有興趣的人能夠試試. |
一:
設置crontab 時提示No space left on device
用df -k 檢查還有空間
用df -i 顯示 /var 已佔用100%,若是inode耗盡,則系統上將不能建立文件。
在/var/spoo/clientmqueue/下有超多的文件 ls 半天沒反應
用rm -rf * 會自動跳出root,用xargs來解決。
# cd /var/spool/clientmqueue
# ls | xargs rm -f
緣由分析:系統中cron執行的程序有輸出內容,輸出內容會以郵件形式發給cron的用戶,而sendmail沒有啓動因此就產生了這些文件;
解決辦法: 將crontab裏面的命令後面加上> /dev/null 2>&1
二:
故障現象:
1 when you create a new y or file , system will say : No space left on device
[shelladm@linux /var]# mkdir aa
mkdir: cannot create y `aa': No space left on device
2 when create crontab for account shelladm , you will receive error information as follows:
"crontab.6655" 1L, 13C written
crontab: installing new crontab
cron/tmp.6655: No space left on device
crontab: edits left in /tmp/crontab.6655
處理步驟:
1 檢查分區使用率
[root@linux ~]# df -lk
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda2 3020172 136008 2730744 5% /
/dev/hda1 101089 9378 86492 10% /boot
/dev/hda7 105708092 38996880 61341488 39% /b2006
none 1028548 0 1028548 0% /dev/shm
/dev/hda3 3020172 1421092 1445660 50% /usr
/dev/hda6 497829 371795 100332 79% /var
分區/var的使用率只有79%,系統有空間能夠用
2 檢查/var/lock下的文件,刪除/var/lock/subsys/nfs後,touch /var/aa,成功建立文件,刪除/var/aa
3 發現刪除/var/lock下的任意一個文件後
[root@linux /var]#touch /var/aa -------------------成功
[root@linux /var]# touch aa1 -------------------失敗
touch: creating `aa1': No space left on device
4 將檢查擴大到/var下的其餘目錄,
[root@linux icons]# cd /var/www/icons
[root@linux icons]# mv a.gif /tmp
[root@linux icons]# mv a.png /tmp -------------------移走兩個文件
[root@linux icons]# df -li
[root@linux icons]# touch aa
[root@linux icons]# touch bb
[root@linux icons]# touch cc
touch: creating `cc': No space left on device -----------只能建立兩個文件,當建立第三個文件時,出錯
5 懷疑分區/var的inode用盡致使上述問題,檢查inode使用率
[root@linux icons]# df -li
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda2 384000 23698 360302 7% /
/dev/hda1 26104 41 26063 1% /boot
/dev/hda7 13434880 7964 13426916 1% /b2006
none 257137 1 257136 1% /dev/shm
/dev/hda3 384000 78026 305974 21% /usr
/dev/hda6 128520 128520 0 100% /var
發現/var的inode使用率已經達到100%,空餘的inode爲0
6 分區/var沒有配置quota ,平均每一個inode的佔用空間爲:497829k(var size)/128520(inodes)=3.87k,說明分區的最小block爲4k,沒法增長inode限額。
7 發現/var/spool/clientmqueue下面有太多的文件,共有127679個,佔用了127679/128520(inodes)=99.3%的inode
系統的郵件配置有問題,致使系統發出的郵件堆積在隊列中,佔用的大量的inode.
處理方法:確認/var/spool/clientmqueue下的文件已經無用後,刪除之。而後/var寫入正常。
最好的解決辦法是從新設置系統郵件,使其能正常發送。
刪除文件後的inode使用狀況
[root@linux clientmqueue]# df -li
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda2 384000 23698 360302 7% /
/dev/hda1 26104 41 26063 1% /boot
/dev/hda7 13434880 7964 13426916 1% /b2006
none 257137 1 257136 1% /dev/shm
/dev/hda3 384000 78026 305974 21% /usr
/dev/hda6 128520 4561 123959 4% /var
結論:分區/var的inode所有用盡,free inode爲0,致使沒法建立新的文件或目錄,之後遇到相似的問題要注意
用df -li 檢查inode的使用狀況。
=========================
http://blog.csdn.net/hunanchenxingyu/article/details/38587633
一、現象
cp: cannot create directory `/mnt/usr/portage/app-emacs/h4x0r': No space left on device
cp: cannot create directory `/mnt/usr/portage/app-emacs/csv-mode': No space left on device
cp: cannot create directory `/mnt/usr/portage/app-emacs/ess': No space left on device
cp: cannot create directory `/mnt/usr/portage/app-emacs/mew': No space left on device
cp: cannot create directory `/mnt/usr/portage/app-emacs/org-mode': No space left on device
cp: cannot create directory `/mnt/usr/portage/app-emacs/vhdl-mode': No space left on device
cp: cannot create directory `/mnt/usr/portage/app-emacs/tdtd': No space left on device
cp: cannot create directory `/mnt/usr/portage/app-emacs/dired-sort-menu': No space left on device
cp: cannot create directory `/mnt/usr/portage/app-emacs/uboat': No space left on device
cp: cannot create directory `/mnt/usr/portage/app-emacs/mode-compile': No space left on device
二、分析
df -i : 查看文件系統的inodes節點數
root@lemaker:/extFlash1/rootfs/gentoo# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1179648 210218 969430 18% /
udev 124795 532 124263 1% /dev
tmpfs 126991 455 126536 1% /run
none 126991 6 126985 1% /run/lock
none 126991 1 126990 1% /run/shm
/dev/sda5 24096 231 23865 1% /boot
/dev/sdb1 655360 317560 337800 49% /extFlash1
/dev/mapper/loop0p2 222656 222656 0 100% /mnt
因爲文件系統所對應的inode已經所有使用,最終沒法給後續複製的文件分配inode。
三、解決方法
從新格式化/dev/mapper/loop0p2,並指定inode數,以下:
mkfs.ext4 /dev/mapper/loop0p2 -N 235000 (inode 數根據實際狀況估計)
http://bbs.chinaunix.net/thread-2195775-1-1.html
2.6 inode與ln
一個文件包括有名稱、內容和管理信息如權限或修改時間。
管理信息就存放在Inode中,同時存放的還有文件的長度,文件放在磁盤的位置等
查看一個文件的Inode號碼
# ls -i
654076 test1
咱們用ln使一個鏈指向一個已有的文件。
#ln test1 test2
#ls -i
654076 test1 654076 test2
這裏test1和test2的Inode號碼是同樣的。
也就是說他們實際上是同一個文件(Inode號碼相同,也便是文件放在磁盤的位置同樣),可是具備兩個名稱。
這樣的好處是可讓一個文件存在不一樣的目錄,或者存在不一樣的名稱。
對test1的修改也便是對test2的修改。
# ls -l
-rw-r--r-- 2 root root 29 Dec 29 17:32 test1
-rw-r--r-- 2 root root 29 Dec 29 17:32 test2
~~ 這裏的2,就表示指向同一個Inode的連接數。
刪掉test2
#ls -l
-rw-r--r-- 1 root root 29 Dec 29 17:32 test1
或許會有疑惑,既然test1和test2是同一個文件,爲何刪除test2,test1還在呢?
在這種狀況,刪除test2只是刪除了一條指向654076這個Inode的一個連接。
文件依然存在。只有當最後一條鏈被刪除時,即指向Inode的連接數爲0時,文件才被刪除。
# ln /boot/grub/grub.conf /home/test/grub
ln: creating hard link `grub' to `/boot/grub/grub.conf': Invalid cross-device link
在這裏,個人系統分了/,/boot,等分區
ln有一個問題就是不能跨設備(分區或者文件子系統)建立連接,一是由於分區能夠被mount和umount,
跨分區的硬連接在分區umount會帶來一些麻煩,另外每一個分區的Inode值不相同。
昨天看見有個帖說,除了swap區,能夠把全部的磁盤分紅一個區。
可是這樣當一個分區出現文件系統錯誤,可能全部的數據都沒有了。
而劃分多個分區,每一個分區的Inode不一樣。即便某個分區的數據錯誤,也不至於影響到整個系統。
跨設備建立連接,可使用
#ln -s /test /home/test/test
# ls -li /test
13 -rw-r--r-- 1 root root 0 Dec 29 17:45 /test
# ls -li /home/test/test
1697478 lrwxrwxrwx 1 root root 5 Dec 29 17:46 /home/test/test -> /test
這樣就是一個軟連接,它是能夠跨設備的,在文件類型這裏會顯示l
能夠看到它們的Inode號碼是不一樣的,並且連接的數目分別各爲1
所以它們並非同一個文件。
在軟連接的狀況下,修改連接到的文件/home/test/test,也修改了被連接的文件/test。
但這種方式和硬連接是不一樣的。這是經過某種機制來實現同步。而不是同一個文件的修改。
刪除連接到的文件,對被連接文件沒有任何影響。
而刪除被連接文件/test,連接到的文件依然存在,可是會閃爍,提示被連接的文件不存在了
也不能讀取該文件了
#rm /test
# ls -il /home/test/test
1697478 lrwxrwxrwx 1 root root 5 Dec 29 17:51 /home/test/test -> /test
# more /home/test/test
/home/test/test: No such file or directory
事實上/home/test/test是存在的,做爲一種特殊的文件類型爲l的文件。
只不過軟連接的一些規則決定了它不可讀。
爲了加深對文件Inode的理解,能夠從mv和cp文件來講明:
# cp test1 test2
# ls -i
654076 test1 654081 test2
這兩個文件Inode值不同,cp的實質是複製建立了一個新文件
#mv test1 test3
#ls -i
654076 test3
跟上面的比較,test1和test3的Inode是相同。
因此mv只是更改了文件的名稱,也便是訪問文件的入口
它們是指向同一個位置磁盤上的文件。
可是若是mv一個文件到另外一個分區。
如前面所講,不一樣分區的Inode值是不一樣的。
# ls -il /root/fs/test
654076 -rw-r--r-- 1 root root 29 Dec 29 17:32 /home/fs/test
# mv test /boot/test
# ls -il /boot/test
16 -rw-r--r-- 1 root root 29 Dec 29 17:32 /boot/test
因此mv文件到不一樣的分區,是刪除掉原分區的文件以後在另一個分區從新建立這個文件。
所以有了一個不一樣的Inode值。
2.7 調整Inode數量
另外,每一個分區的Inode數目是有限的。
可使用df -i來查看
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VolGroup00-LogVol00
1958400 97435 1860965 5% /
/dev/sda1 26104 32 26072 1% /boot
/dev/shm 23850 1 23849 1% /dev/shm
當一個磁盤分區(文件子系統)的Inode被用光的時候,是沒法再建立文件的。
這種狀況在郵件服務器或者BBS這種系統中容易出現,由於用戶建立了不少小文件的狀況。
要增長Inode的數量只能umount文件系統,而後用mke2fs命令來調整
#mke2fs.ext3 /dev/sda1 [ -N number-of-inodes ]
直接指定須要的Inode數目
或者
#mke2fs.ext3 /dev/sda1 [ -i bytes-per-inode ]
調整字節/inode的比例,來達到增長建立inode數目的目的。
磁盤空間必定的狀況下,固然比例越小,能建立的Inode就越多
固然若是你是隻有不多可是很大的數據庫文件。就能夠調高bytes/inode的比例。
(更多的關於mke2fs的信息,本身去man)
不過注意。調整Inode至關於從新格式化了分區。原有的文件都會丟失
因此確實須要調整的話,先要備份數據;
或者在服務器搭建時預先設置好。
================================
http://www.eygle.com/archives/2007/07/inode_no_space_lefton_device.html
這是一則學習筆記,具體問題ITPUB上提問的朋友已經本身解決。
做者提出的問題是這樣的:
一臺測試的服務器,停電再起來後發現listener起不來,報錯以下:
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.191.100)(PORT=1521)))
Error listening on: (ADDRESS=(PROTOCOL=ipc)(PARTIAL=yes)(QUEUESIZE=1))
No longer listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.191.100)(PORT=1521)))
TNS-12549: TNSperating system resource quota exceeded
TNS-12560: TNSrotocol adapter error
TNS-00519: Operating system resource quota exceeded
Linux Error: 28: No space left on device
對於這個提示,通常的直覺反映是磁盤空間用完了,不過這個錯誤確定你們都能發現:
首先查看log文件,已經2G了,打開看看日誌裏面也沒發現什麼異常,認爲日誌是天然增加到這麼大的,因而直接cat /dev/null>listener.log把日誌清空。而後listener仍是起不來,仍然報上面的錯誤。以後重啓機器,仍是不行,檢查磁盤空間也沒有問題。
顯然沒這麼簡單,之前的一些經驗,當系統信號量不足時也可能致使這類錯誤提示。
不過做者最後發現的問題是inode耗盡。
在Linux上,咱們能夠用df -i來查看inode的分配狀況:
[oracle@jumper elog]$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/hda3 131616 25376 106240 20% /
/dev/hda1 66264 35 66229 1% /boot
/dev/hda5 1048576 37166 1011410 4% /data1
/dev/hda9 294336 6020 288316 3% /home
/dev/hda6 1048576 20467 1028109 2% /opt
none 64193 1 64192 1% /dev/shm
/dev/hda8 524288 87362 436926 17% /usr
/dev/hda7 524288 1598 522690 1% /var
若是inode耗盡,則系統上將不能建立文件。監聽器就可能沒法啓動。
做者當時耗盡的/var下的inode,那麼Oracle監聽器是否須要使用var下的空間呢?
咱們看一下測試:
[oracle@jumper tmp]$ strace -o lsnrctl.log lsnrctl start
LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 09-JUL-2007 15:45:09
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
Starting /opt/oracle/product/9.2.0/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 9.2.0.4.0 - Production
System parameter file is /opt/oracle/product/9.2.0/network/admin/listener.ora
Log messages written to /opt/oracle/product/9.2.0/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.33.11)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
umovestr: Input/output error
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 9.2.0.4.0 - Production
Start Date 09-JUL-2007 15:45:09
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security OFF
SNMP OFF
Listener Parameter File /opt/oracle/product/9.2.0/network/admin/listener.ora
Listener Log File /opt/oracle/product/9.2.0/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.33.11)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "eygle" has 1 instance(s).
Instance "eygle", status UNKNOWN, has 1 handler(s) for this service...
Service "julia" has 1 instance(s).
Instance "eygle", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
檢查一下跟蹤文件:
[oracle@jumper tmp]$ grep var lsnrctl.log
execve("/opt/oracle/product/9.2.0/bin/lsnrctl", ["lsnrctl", "start"], [/* 33 vars */]) = 0
connect(4, {sa_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or directory)
access("/var/tmp/.oracle", F_OK) = 0
access("/var/tmp/.oracle/sEXTPROC", F_OK) = 0
connect(4, {sa_family=AF_UNIX, path="/var/tmp/.oracle/sEXTPROC"}, 110) = 0
啓動監聽文件後,/var/tmp/.oracle目錄下會建立兩個文件,用於外部存儲過程調用的監聽和本地監聽:
[oracle@jumper tmp]$ ll /var/tmp/.oracle/ |wc -l
16
[oracle@jumper tmp]$ lsnrctl stop
LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 09-JUL-2007 15:46:08
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
The command completed successfully
[oracle@jumper tmp]$ ll /var/tmp/.oracle/ |wc -l
14
[oracle@jumper tmp]$ lsnrctl start
LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 09-JUL-2007 15:46:13
Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
Starting /opt/oracle/product/9.2.0/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 9.2.0.4.0 - Production
System parameter file is /opt/oracle/product/9.2.0/network/admin/listener.ora
Log messages written to /opt/oracle/product/9.2.0/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.33.11)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 9.2.0.4.0 - Production
Start Date 09-JUL-2007 15:46:13
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security OFF
SNMP OFF
Listener Parameter File /opt/oracle/product/9.2.0/network/admin/listener.ora
Listener Log File /opt/oracle/product/9.2.0/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.33.11)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "eygle" has 1 instance(s).
Instance "eygle", status UNKNOWN, has 1 handler(s) for this service...
Service "julia" has 1 instance(s).
Instance "eygle", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@jumper tmp]$ ll /var/tmp/.oracle/ |wc -l
16
[oracle@jumper tmp]$ ll .oracle/
total 0
srwxrwxrwx 1 oracle dba 0 Jan 18 2006 s#11126.1
srwxrwxrwx 1 oracle dba 0 Jan 3 2007 s#12200.1
srwxrwxrwx 1 oracle dba 0 Apr 24 2006 s#14328.1
srwxrwxrwx 1 oracle dba 0 Oct 20 2006 s#14420.1
srwxrwxrwx 1 oracle dba 0 May 8 2006 s#15102.1
srwxrwxrwx 1 oracle dba 0 Mar 18 2005 s#16499.1
srwxrwxrwx 1 oracle dba 0 Jul 9 15:46 s#16661.1
srwxrwxrwx 1 oracle dba 0 May 18 2006 s#21975.1
srwxrwxrwx 1 oracle dba 0 Jun 28 2005 s#23361.1
srwxrwxrwx 1 oracle dba 0 Nov 3 2006 s#27269.1
srwxrwxrwx 1 oracle dba 0 Nov 10 2006 s#4200.1
srwxrwxrwx 1 oracle dba 0 Oct 17 2006 s#6146.1
srwxrwxrwx 1 oracle dba 0 Aug 28 2006 s#6565.1
srwxrwxrwx 1 oracle dba 0 Jun 27 2006 s#9884.1
srwxrwxrwx 1 oracle dba 0 Jul 9 15:46 sEXTPROC
這個緣由纔是致使監聽器沒法啓動的罪魁禍首。
遭遇者的日誌記錄參考:
http://zhang41082.itpub.net/post/7167/305840
-The End-
===================================
參考資料:
http://zhidao.baidu.com/question/1238517886290647819.html
http://bbs.chinaunix.net/thread-2272344-1-1.html
爲何/tmp/orbit-root下會又這麼多socket文件呢???
ORBit(Object Request Broker)相關的進程產生的,主要是由於對象或者進程間消息傳遞產生的臨時文件。ORB是CORBA應用的基礎 |