1)由于fdisk不支持2TB以上的分区,在玩的的时候没注意检查,本来3TB的磁盘阵列,只分2TB的数据,也没放在心上,现在要交出去了,只能把df改一下来对付一下他们了。LUPA开源社区9{i,NHa$L#z
.C6e6XrF5m1J)S0
2)先找到源代码,因为是ES3的系统,有4张盘,但没有SRPMS的包。只能到网上下了。rpmfind吧
kQ&s4C
j)M^%UZ#Y0相关命令:rpm -qf /bin/df
6`-z u/{6YX0ES3是这个:coreutils-4.5.3-28LUPA开源社区9LOT
]QYo7x'U}E8D
注意一定要SRPMS的包,不然没有源代码。
qN,W7s7k*Z%v9Di,P0
+^!K;u @)i\0
3)安装SRPMS
8^OYRU/?*b#B0rpm -ivh coreutils-4.5.3-28.src.rpm
'] Kg6y#m{2I0这时要到/usr/src/redhat/SOURCES下面找LUPA开源社区&lj|I$b`
解压缩:
(J*h'T~#P9ku(}G0tar xvjf coreutils-4.5.3.tar.bz2LUPA开源社区J'r:tf&R.C
cd coreutils-4.5.3LUPA开源社区BsRa ~}f8cX
cd srcLUPA开源社区XCf,C6VXg
编辑df.c吧
9n$`7\N5D1_7_0
LUPA开源社区uxlpJJT
4)修改df.c程序,先查看主函数,了解流程,再对程序的功能模块大体有个了解,因为这里要找的是如果显示总空间和空闲的空间,必然要有printf或puts之类的东东,这是个技巧,但我还是一步步查看下来,显示分区主要靠这个WHILE循环,在每次循环显示一个DEV.LUPA开源社区Kn$]8|,{2O-X
~
OK这时只要让当变量disk与/dev/sdc1相等,那就是要改它的时候了。LUPA开源社区K3]E0{f2V2D.Vr4}
相关语句:if (strcmp(disk,"/dev/sdc1")==0)LUPA开源社区zN4aq%~f%`#h
{
Jr9zadF0但要注意:人家的total(总空间)和available(空闲空间)是要做变量 输入到df_readable函数里的,最后得出:30G或30M之类的字符串,所以这时你想先用df_readable把结果输出到一个字符数组,再把字符数组转换到整型变量,做完运算再转换为字符数组,这种路线就很难实现了.LUPA开源社区C&ns%_y&{[^
所以这里就简单的测出1TB的数据大概和total变量数据的260000000接近.
!Mr9v*y/{7r3j G"u3^0直接做赋值
f,m-]NFm5RV.KWa*N/y0相关语句:
zng3ro0 total = total+260000000;
!M Xked0 available = available+260000000;LUPA开源社区E8XV*p}M[ ^
这里注意:不要在它的printf里做加赋值如:LUPA开源社区8o0f"m5Tz[#E
df_readable (0, total+260000000,LUPA开源社区"XM9l7P\2x4c4F
buf[0], input_units, output_units)LUPA开源社区 |UH
j#})z+G
原因是后面要做比例运算,否则就永远都是百分之5之类的了。嘿嘿
'TM'Hi wk3HD$x0
/Y*` e+U.F0相关代码段如下:LUPA开源社区 ?"@Au$lB y
/* hacker 's part.......begin */
vUUe7{+fq0
if (strcmp(disk,"/dev/sdc1")==0)
/q T;t&Vs0t0{LUPA开源社区 Ah!R7{kBpW
total = total+260000000;
+vlA}%T9Y~0 available = available+260000000;LUPA开源社区,~
}(W'B(gJ:T
printf (" %*s %*s %*s ",LUPA开源社区eh6g t z#Vo dSB6u
width, df_readable (0, total,
.u0ni)om.R0 buf[0], input_units, output_units),LUPA开源社区0m1x4Bz+K+e!p2I]w#]x9a
width, df_readable (negate_used, used,
8na5_%n E0 buf[1], input_units, output_units),
^p4e0w"RB0 width, df_readable (negate_available, available,
p6KHp0[0 buf[2], input_units, output_units));
o
@4T%I f|:d(Vg U0 }LUPA开源社区_L6R\"nG)r F-m
elseLUPA开源社区f/?9{Q
F6yq
m`
{LUPA开源社区']G)x1|;z
printf (" %*s %*s %*s ",
*`O8q;QgK0 width, df_readable (0, total,
.qO/P9n!j-R_._ AC0 buf[0], input_units, output_units),
%f)c/?v\)R!_0 width, df_readable (negate_used, used,
v'TA8TP+\$P0 buf[1], input_units, output_units),LUPA开源社区 M!q
a
y
YV
width, df_readable (negate_available, available,
+w!Bben^6s3pF0 buf[2], input_units, output_units));LUPA开源社区6~j*d#VOc6];v
}
/T on"T/^1p/`
v*Q0
/* hacker 's part........end */LUPA开源社区 }r4N9J]4p+~
sB Vr;O|
}.oy0
5)编译:
'g
N?Vr/iO#d0configure;make;make installLUPA开源社区'lC
~7pmr
6)结果
用-h显示输出
[root@db root]# df -h
Y-f$N;S0@3F\0Filesystem Size Used Avail Use% Mounted on
o4vRrx$n)W0/dev/sda1 29G 2.6G 25G 10% /LUPA开源社区
w(];x-D A4|(}$Qw
/dev/sdb1 135G 33M 128G 1% /backup
D6OCz3O/_?F0none 2.0G 0 2.0G 0% /dev/shm
Dc8C2_/w
kf7d+K'T"y0/dev/sdc1 3.0T 9.9G 2.9T 1% /u01
re4F"G
t0
以MB显示输出LUPA开源社区H
{8N\9m,A
[root@db root]# df -mLUPA开源社区 @8R,e%i:xfa
Filesystem 1M-blocks Used Available Use% Mounted on
VWY`&rPs0/dev/sda1 29526 2657 25369 10% /
^XSm5rcU0/dev/sdb1 137815 33 130782 1% /backupLUPA开源社区yX#d6vG7C8X-o
none 1998 0 1998 0% /dev/shmLUPA开源社区yU9_IBh6QV
/dev/sdc1 3079870 10129 2964884 1% /u01LUPA开源社区 b7G5Vs+x{