Submitted by admin on 2008, July 15, 9:53 AM
进入系统后提示:
Press enter for maintenance
(or type Control-D to continue):
/dev/sda3 contains a file system with errors, check forced.
/dev/sda3: Inodes that were part of a corrupted orphan linked list found.
/dev/sda3: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options)
运行fsck.ext3 -p /dev/sda3 ;未能修复
运行fsck.ext3 -y /dev/sda3 ; repair ok
;注意在修复其它filesystem时要umount掉运行该命令。
文件系统--fsck
指令:fsck
使用权限 : 超级使用者
使用方式 : fsck --help
fsck 1.35 (28-Feb-2004)
fsck.ext3: invalid option -- h
Usage: fsck.ext3 [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]
[-I inode_buffer_blocks] [-P process_inode_size]
[-l|-L bad_blocks_file] [-C fd] [-j ext-journal]
[-E extended-options] device
Emergency help:
-p Automatic repair (no questions) ;自动修复
-n Make no changes to the filesystem ;模拟修复
-y Assume "yes" to all questions ;所有的问题都回答yes
-c Check for bad blocks and add them to the badblock list
;检查坏块,并记录下坏块列表
-f Force checking even if filesystem is marked clean
;对标记为“干净”的文件系统进行强制检查 v Be verbose ;详细信息
-b superblock Use alternative superblock
-B blocksize Force blocksize when looking for superblock
-j external-journal Set location of the external journal
-l bad_blocks_file Add to badblocks list
-L bad_blocks_file Set badblocks list
引用网上的一个例子 :
问题: SLES8 在mount盘阵的时候,出现
server1:/ # mount /dev/sde1 /foo
mount: wrong fs type, bad option, bad superblock on /dev/sde1,
or too many mounted file systems
的问题。请问这种问题怎么能解决呢?
回答:
这个错误信息标识 /dev/sde1 设备上的 ext3 文件系统的超级块损坏了,ext3 文件系统的元数据保存在超级块中。
ext3 文件系统还有一些备份的超级块,可以尝试用备份的超级块加载 ext3 文件系统和修复 ext3 文件系统。
备份的超级块信息可以通过以下命令获得,这个命令模拟 ext3 文件系统创建时的动作并打印出备份超级块的位置,给出的位置缺省是以4k为单位的,mount 在使用时需要为它提供以1k为单位的偏移,需要乘4:
注意!!!!!一定要使用'-n'作为参数模拟 ext3 文件系统的创建而不是真的创建 ext3 文件系统
# mkfs.ext3 -n /dev/hda7
mke2fs 1.38 (30-Jun-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2198880 inodes, 4393738 blocks
219686 blocks (5.00%) reserved for the super user
First data block=0
135 block groups
32768 blocks per group, 32768 fragments per group
16288 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
使用备份的超级块来加载 ext3 文件系统的命令:
语法: mount.ext3 -o sb=n
# mount.ext3 -o sb=131072 /dev/hda7 /media/hda7
使用备份的超级块来修复 ext3 文件系统的命令
语法:fsck.ext3 -b superblock
# fsck.ext3 -b 32768 /dev/hda7
linux | 评论:1
| Trackbacks:0
| 阅读:3840
Submitted by admin on 2008, July 10, 2:18 PM
js代码 | 评论:0
| Trackbacks:0
| 阅读:1854
Submitted by admin on 2008, July 2, 10:40 AM
Jul 2 10:22:04 pptp kernel: EXT3-fs warning (device sda2): ext3_dx_add_entry: Directory index full!
Jul 2 10:22:04 pptp kernel:
Jul 2 10:22:04 pptp kernel: EXT3-fs warning (device sda2): ext3_dx_add_entry: Directory index full!
Jul 2 10:22:04 pptp kernel:
Jul 2 10:22:05 pptp kernel: EXT3-fs warning (device sda2): ext3_dx_add_entry: Directory index full!
//
df -i
See if you have any free inodes left on that mounted partition.
If you need to unmount /var normally fuser -m /var will let you know whats running on it, course you fuser -k as you've mentioned too.
Running in single user mode if practical might be most beneficial. If you get desperate you can of course comment out /var in fstab and run in single user mode to the fsck the drive and/or resize2fs it.
Also bear in mind that running fsck on a filesystem with a directory containing an overwhelming number of files might end up just making your machine run out of ram, forcing you to reboot and/or corrupting the filesystem your trying to grow.
http://www.linuxquestions.org/questions/linux-server-73/ext3-fs-warning-device-dm-0-ext3dxaddentry-directory-index-full-631376/
此问题为inodes(索引节点)已满,引用"inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。"
通过几台的情分析判断,每一G的空间,有120000左右的inodes
可以在格式化分区时指定inodes的大小,加个 -N参数,如
mkfs.ext3 -N 2500000 /dev/sda6 #2500000 为inodes的大小
实际应用需要要根据分区的大小来定估算
造成此问题,通常是产生了大量的小文件
linux | 评论:0
| Trackbacks:0
| 阅读:3548
Submitted by admin on 2008, June 20, 1:54 PM
一个不错的PHP下各种编码转换类
* 中文编码集合类库
*
* 目前该类库可以实现,简体中文 <-> 繁体中文编码互换,简体中文、繁体中文 -> 拼音单向转换,
* 简体中文、繁体中文 <-> UTF8 编码转换,简体中文、繁体中文 -> Unicode单向转换
附件: chinese.rar (126.71 K, 下载次数:90)
php | 评论:0
| Trackbacks:0
| 阅读:1686
Submitted by admin on 2008, June 18, 12:56 PM
从php5.10开始,php中加入了时区的设置,在php中显示的时间都是格林威治标准时间,这就造成了我们中国的用户会差八个小时的问题!
相关设置是修改php.ini中的 date.timezone 参数:
[Date]
; Defines the default timezone used by the date functions
;date.timezone =
默认是关闭的,只需把注释去掉,改为即可
[Date]
; Defines the default timezone used by the date functions
date.timezone = PRC
其中PRC是“中华人民共和国”!
其他选项可以参考php手册。
不过这上面的亚洲地区漏掉了我们的首都北京,不知道老外是不是故意的!
如果没有修改php.ini的权限,只需要在调用时间日期函数的时候,调用 date_default_timezone_set(’PRC’) 即可!
也可以调用date_default_timezone_get()来查看当前的时区设置!
關於XXX,大陸內地可用的值是:
Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次為重慶,上海,烏魯木齊)
港台地區可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次為澳門,香港,台北)
台灣地区可設為:date.timezone = "Asia//Taipei"
還有新加坡:Asia/Singapore
php | 评论:0
| Trackbacks:0
| 阅读:1581
Submitted by admin on 2008, June 14, 1:18 AM
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。所以我花了很多时间来研究这个问题,网上也查不到解决方案,期间把容容拉来帮忙,结果是我们两人都郁闷了。。。。。。。。。
下面先来看看例子:
table
id name
1 a
2 b
3 c
4 c
5 b
库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。
比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。
select distinct name from table
得到的结果是:
name
a
b
c
好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:
select distinct name, id from table
结果会是:
id name
1 a
2 b
3 c
4 c
5 b
distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。
我们再改改查询语句:
select id, distinct name from table
很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。。。。。。。
很麻烦吧?确实,费尽心思都没能解决这个问题。没办法,继续找人问。
拉住公司里一JAVA程序员,他给我演示了oracle里使用distinct之后,也没找到mysql里的解决方案,最后下班之前他建议我试试group by。
试了半天,也不行,最后在mysql手册里找到一个用法,用group_concat(distinct name)配合group by name实现了我所需要的功能,兴奋,天佑我也,赶快试试。
报错。。。。。。。。。。。。郁闷。。。。。。。连mysql手册也跟我过不去,先给了我希望,然后又把我推向失望,好狠哪。。。。
再仔细一查,group_concat函数是4.1支持,晕,我4.0的。没办法,升级,升完级一试,成功。。。。。。
终于搞定了,不过这样一来,又必须要求客户也升级了。
突然灵机一闪,既然可以使用group_concat函数,那其它函数能行吗?
赶紧用count函数一试,成功,我。。。。。。。想哭啊,费了这么多工夫。。。。。。。。原来就这么简单。。。。。。
现在将完整语句放出:
select *, count(distinct name) from table group by name
结果:
id name count(distinct name)
1 a 1
2 b 1
3 c 1
最后一项是多余的,不用管就行了,目的达到。。。。。
唉,原来mysql这么笨,轻轻一下就把他骗过去了,郁闷也就我吧(对了,还有容容那家伙),现在拿出来希望大家不要被这问题折腾。
哦,对,再顺便说一句,group by 必须放在 order by 和 limit之前,不然会报错,差不多了,发给容容放网站上去,我继续忙碌。。。。。。
-----------------------------------------------------------------------------------------
更郁闷的事情发生了,在准备提交时容容发现,有更简单的解决方法。。。。。。
select id, name from table group by name
看来对mysql的了解还是太肤浅了,不怕被笑话,发出来让大家别犯同样的错误。。。。。。
by 索尔
原文 http://www.phpv.net/html/1501.html
这篇文章帮了我个很大的忙,帮我解决了我想了一个下午和晚上都没解决的问题,就一个group by name给解决了."看来对mysql的了解还是太肤浅了"
mysql/db | 评论:0
| Trackbacks:0
| 阅读:1388
Submitted by admin on 2008, June 11, 4:16 PM
开始:
1、使用双网卡。一块连接外,一块连接内网.连接外网的网卡标识rl1,连接内网的为rl0
(因为我2块网卡都是REALTEK8139的,所以网卡标识为rl,1和0是两块网卡的区别号)
2、在/etc/rc.conf中加上:
ifconfig_rl1="inet 218.92.251.108 netmask 255.225.225.0"
##(对外网卡的设置,很显然,218.92.251.108为静态IP地址。255.255.255.0子网掩码。不懂?我颠~)
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
##(对内网卡IP地址以及子网掩码的设置)
##以上加进rc.conf是为了再每次开机的时候配置好两块网卡的IP地址等。
firewall_enable="NO" #取消防火墙
gateway_enable="YES" ##启用网关功能,很显然,很重要。
named_enable="YES" ##启用DNS名字服务,这样可以让内网通过设置主机做DNS
natd_enable="YES" ##启用nat功能,很显然,特重要
natd_interface="rl1" ##设置NAT转发的网卡标识号,rl1为对外连接网卡。相当于###WIN2000里的连接共享设置的那块网卡连接。
3,设置/etc/ipnat.conf
map rl1 192.168.0.0/24 ->; 218.92.251.108/32 portmap tcp/udp 10000:65000
map rl1 192.168.0.0/24 ->; 218.92.251.108/32
##以上是设置允许共享连接的内网IP范围,很显然,24精确到最后一位!也就是说###192.168.0.*的子机都可以通过这台主机上网。
4,设定开机自动执行ipnat。
#cd /usr/local/etc/rc.d
#vi runipnat.sh
##加入以下内容:
#!/bin/sh
/sbin/ipnat -f /etc/ipnat.conf
#chmod 755 runipnat.sh ##权限设为可执行。
5、设置内核,至关重要!
因为ipfw和ipfilter不能共存,所以如果要使用ipfilter,必须将内核中有关ipfw的部份注释掉
#cd /usr/src/sys/i386/conf ##/usr/src/sys/i386/conf是内核文件所在目录
#cp GENERIC DWOLF ##备份内核文件GENERIC
#grep -i IPFIREWALL DWOLF ##查找:IPFIREWALL,如果找到,就加"#"注释掉:
#vi DWOLF ##vi编辑,也可以用ee编辑器
#options IPFIREWALL
#options IPDIVERT
##再加入:
options IPFILTER
options IPFILTER_LOG
##保存!
#config DWOLF ##检查有没有错误
#cd /usr/src
#make kernel KERNCONF=DWOLF ##编译内核
#reboot
##重起以后打dmesg查看启动信息,我看到有一条
IP Filter: v3.4.31 initialized. Default = pass all, Logging = enabled
#ipnat -l ## 显示ipnat的设定状况
map rl1 192.168.0.0/24 ->; 218.92.251.108/32 portmap tcp/udp 10000:65000
map rl1 192.168.0.0/24 ->; 218.92.251.108/32
呵呵,搞定!
试试内网机器能不能上网,(测试,可省略)
PING 192.168.0.1 成功连接主机,OK!
PING mdxy.3322.org 解析到IP地址,DNS OK!
PING 218.92.251.122 PING通外网主机,OK!(注意,因为8月中旬全国ISO升级,禁止ICMP数据包,路由器外的IP一般都不给PING,你可以找一个自己可以PING通的外网IP,或者省略这一步,无所谓)
==附录几个常用的IPNAT命令
ipnat -l 会列出目前ipnat的设定及状况
ipnat -C 清除ipnat的设定
ipfstat 监测数据的流量
其它unix | 评论:0
| Trackbacks:0
| 阅读:1617
Submitted by admin on 2008, June 9, 11:55 PM
mysql> SELECT * FROM table1,table2 WHERE table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 USING (id);
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id
-> LEFT JOIN table3 ON table2.id=table3.id;
mysql> SELECT * FROM table1 USE INDEX (key1,key2)
-> WHERE key1=1 AND key2=2 AND key3=3;
mysql> SELECT * FROM table1 IGNORE INDEX (key3)
-> WHERE key1=1 AND key2=2 AND key3=3;
mysql/db | 评论:0
| Trackbacks:0
| 阅读:1828