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

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

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

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

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

 

sed使用

sed -e '编辑指令1' -e '编辑指令2' ... 文件档

其中 , 所有编辑指令都紧接在选项 -e 之後 , 并置於两个 " ' " 特殊字元间。
另外 , 命令上编辑指令的执行是由左而右。

 一般编辑指令不多时 , 使用者通常直接在命令上执行它们。例如 , 删除 yel.
dat 内 1 至 10 行资料 , 并将其
 馀文字中的 "yellow" 字串改成 "black" 字串。此时 , 可将编辑指令直接在命
令上执行 , 其命令如下 :

   sed -e '1,10d' -e 's/yellow/black/g' yel.dat

在命令中 , 编辑指令 '1,10d'(解[5])执行删除 1 至 10 行资料 ; 编辑指令
's/yellow/black/g'(解[6]) ,

 

2.2.1 位址(address)参数的表示法
 实际上 , 位址参数表示法只是将要编辑的资料行 , 用它们的行数或其中的字串
来代替表示它们。下面举几个例子
 说明(指令都以函数参数 d(参照[section4.2]) 为例) :
删除档内第 10 行资料 , 则指令为 10d。
删除含有 "man" 字串的资料行时 , 则指令为 /man/d。
删除档内第 10 行到第 200 行资料, 则指令为 10,200d。

 

执行多个文件档的编辑
 在 sed 命令列上 , 一次可执行编辑多个文件档 , 它们跟在编辑指令之後。例
如 , 替换
  white.dat、red.dat、black.dat 档内的 "yellow" 字串成 "blue" , 其命令
如下:
     sed -e 's/yellow/blue/g' white.dat red.dat black.dat

上述命令执行时 , sed 依 white.dat、red.dat、black.dat 顺序 , 执行编辑指
令 s/yellow/blue/(请参照[section 4.1] ,
进行字串的替换。

 


对t.txt文件内容前加上#
sed -i -e 's/^/#/' t.txt


sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
把config里的enforcing替换为disabled

sed -i -e '/alias vi=vim/d' /root/.bashrc
删除所有含有"alias vi=vim"的行

sed -i -e 's/alias vi=vim//g' /root/.bashrc
替换所有"alias vi=vim"串为空,也即是删除

sed -i "8 s/^/alias vi='vim'/" /root/.bashrc
在第8行增加"alias vi='vim'"

sed -i -e 's/^LANG=.*/LANG="zh_CN.GB18030"/'   /etc/sysconfig/i18n
将LANG开头的行替换为LANG="zh_CN.GB18030"

sed -i '205 s#;open_basedir =#open_basedir = /data/www/wwwroot:/tmp#g' /usr/local/Zend/etc/php.ini
把 ;open_basedir = 替换为 open_basedir = /data/www/wwwroot:/tmp
sed -i '205 s#open_basedir = /data/www/wwwroot:/tmp#;open_basedir =#g' /usr/local/Zend/etc/php.ini

查看CPU型号和编译参数

    查看分析你的CPU型号:
    http://gentoo-wiki.com/Safe_Cflags 查找您的GCC编译参数.

    确定系统CPU类型:
     cat /proc/cpuinfo | grep "model name"
    执行后会看到系统中CPU的具体型号,记下CPU型号。

TC流量控制

控制整个网段

tc qdisc add dev eth0 root handle 1: htb r2q 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 10kbit burst 10k
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 10.10.10.0/8 flowid 1:1

patch

patch -p0 <  /download/patch-2.6.10-bk4 或
patch -p0  -i /download/patch-2.6.10-bk4 
我认为这样才是真的在做patch
patch -R //对new和old文件通通应用patch
      -N //忽略反向的或已经应用的补丁
      -f  //不回答[y/n],假定不选择-R
      -t //不回答[y/n],假定选择-R
例:让它自动完成patch -tp0 < patch-file 
bzip2 -dc /download/patch-2.6.10-bk4.bz2 |patch -p1
一次打多个,
bzip2 -dc /download/patch-*.bz2 |patch -p1
但要求patch-*.bz2的字母排列顺序和补丁顺序是一样的.

patch -d dietlibc-0.27 -p1 < dietlibc-0.27-signal.patch

 

ppp-2.4.3
patch -p0 -i ppp-2.4.3-mppe-mppc-1.1.patch.gz

 

 

文件系统维护(转载)

ext2/ext3通过数据块储存文件

格式化文件系统:

mkfs.ext3 –b 4096 –i 8192 –m 5 /dev/sdb4

-b       数据块大小

-i inode节点表示的字节数(或数据块大小)

-m 5       为管理员保留的磁盘管理空间5%   

ls –lh /mnt/u

du –sh /mnt/u

df –lh

#tune2fs –l /dev/sdb1          打印文件系统属性

#df

tune2fs 调整ext2/ext3文件系统特性的工具

-l 查看文件系统信息

-m      保留块百分比

-c <count>   设置强制自检的挂载次数

-i <n day>   设置强制自检的间隔时间

-j           ext2转成ext3



tune2fs –c -1 /dev/sdb1    不管挂载多小次都不自检

tune2fs –c -1 –i 0 /dev/sdb1   让分区永远不自检

#mkfs.ext2 /dev/sdb4   格式化成ext2

#tune2fs –j /dev/sdb4   转换为ext3

#df –T              查看分区信息

判断间ext2还是ext3:

tune2fs –l /dev/sdb1 | grep features

看Filesystem features: has_journal

是否有has_journal,有则是ext3文件系统



grep –i “name”   不区分大小写

df –T 分区类型

fsck       检查文件系统数据完整性的工具

用法一、fsck –t ext2 /dev/sdb1

   二、fsck.ext3 /dev/sdb1

#more /etc/fstab

如发现挂载选项有1或2,那么应该进行自检了

#fsck.ext3 –y /dev/sdb1          自动修复错误

用文件来占据内存空间

用文件来占据内存空间,文件可以用 下面的方法产生512M文件,占据512M内存

mount none /tmpfs -t tmpfs
cd /tmpfs
dd if=/dev/zero of=test bs=1M conunt=512




这样就会使512M内存空间被文件test占据