工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表全部文章

linux启动提示:contains a file system with errors, check forced.的解决方(转)

进入系统后提示:

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

Ajax相关

比较早以前就知道了ajax这东东,但从没花时间读过,研究过

这几天因工作需要,得去读和修改一个ajax的小功能代码.

google一下,呵呵

使用 Ajax.Request 类 详解 http://www.busfly.cn/post/ajax_request_show.html

prototype.js开发笔记 https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.html

prototype.js之ajax.request学习笔记(一) http://www.blogjava.net/Jkallen/archive/2006/07/21/59445.html

ext3_dx_add_entry: Directory index full

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的大小

实际应用需要要根据分区的大小来定估算

造成此问题,通常是产生了大量的小文件

 

一个不错的PHP下中文编码各种格式间的转换类

一个不错的PHP下各种编码转换类

 * 中文编码集合类库
 *
 * 目前该类库可以实现,简体中文 <-> 繁体中文编码互换,简体中文、繁体中文 -> 拼音单向转换,
 * 简体中文、繁体中文 <-> UTF8 编码转换,简体中文、繁体中文 -> Unicode单向转换

 

附件: chinese.rar (126.71 K, 下载次数:90)

php5中加入了时区的设置,造成了我们中国的用户会差八个小时的问题

从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

使用distinct在mysql中查询多条不重复记录值的解决办法

在使用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的了解还是太肤浅了"

FreeBSD做Gateway(转)

开始:  
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 监测数据的流量

多表关联查询

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;