http://www.linuxidc.com/Linux/2011-01/31758.htm
Linux系統(tǒng)重啟或無故變?yōu)橹蛔x造成網(wǎng)站無法正常訪問的簡單臨時的做法:
一、
1、mount:
用于查看哪個模塊輸入只讀,一般顯示為:
/dev/hda1 on / type ext3 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda5 on /home type ext3 (rw)
none on /dev/shm type tmpfs (rw)
/dev/hda2 on /usr/local type ext3 (rw)
/dev/nb1 on /EarthView/RAW type ext3 (ro)(變?yōu)橹蛔x了)
2、如果發(fā)現(xiàn)有ro,就重新mount,或者umount以后再remount
3、umount /dev/nb1
如果發(fā)現(xiàn)有提示“device is busy”,找到是什么進程使得他busy
fuser -m /mnt/data 將會顯示使用這個模塊的pid
fuser -mk /mnt/data 將會直接kill那個pid
然后重新mount即可。
4、還有一種方法是直接remount,命令為
mount -o rw,remount /mnt/data
二、具體深入的做法,情況不同可以自行選擇:
服務(wù)器/var/log/messages報錯 :
end_request: I/O error, dev sda, sector 122194293 Buffer I/O error on device sda1, logical block 446493 lost page write due to I/O error on sda1
下面是整個處理全過程
[root@www.linuxidc.com ~]# fdisk -lu #第一步 :找出本地扇片所在的分區(qū)。
Disk /dev/sda: 73.4 GB, 73407868928 bytes
255 heads, 63 sectors/track, 8924 cylinders, total 143374744 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 63 4096574 2048256 83 Linux
/dev/sda2 4096575 75778604 35841015 83 Linux
/dev/sda3 75778605 129034079 26627737+ 83 Linux
/dev/sda4 129034080 143364059 7164990 5 Extended
/dev/sda5 129034143 139267484 5116671 83 Linux
/dev/sda6 139267548 143364059 2048256 82 Linux swap
[root@www.linuxidc.com ~]# tune2fs -l /dev/sda3 |grep "Block size" #找到block大小。
Block size: 4096
(122194293-75778605)*512/4096 =528691 利用公式算出邏輯塊地址
b = (int)((L-S)*512/B)
[root@www.linuxidc.com ~]# debugfs
debugfs 1.35 (28-Feb-2004)
debugfs: open /deb/sda3
/deb/sda3: No such file or directory while opening filesystem
debugfs: open /dev/sda3
debugfs: icheck 582391
Block Inode number
582391 277584
debugfs: ncheck 277584
Inode Pathname
277584 /users/inn.net.cn/data/upload/download/innshow004.rar
debugfs: quit
[root@www.linuxidc.com ~]#dd if=/dev/zero of=/dev/sda1 bs=4096 count=1 seek=582391 #找到這個快的文件之后,需要做好備份,我們強制把它設(shè)置為0字節(jié)。
[root@www.linuxidc.com ~]# sync
http://bbs.voip88.com/thread-430-1-1.html
使用 fsck -y ,如果有執(zhí)行修復且當出現(xiàn)檔案異常無法回復時,系統(tǒng)會將它移至 lost+found,並且以 inode 命名。如果硬碟或檔案分區(qū)有損壞,在做完 fsck -y 後, 如發(fā)現(xiàn) lost+found 新增了許多檔案,那表示原來的檔案系統(tǒng),有不少檔案已遺失,這些可能造成系統(tǒng)無法運行。
http://www.keyofnet.com/?p=398
今天閑來無事,修改了一下/etc/fstab,想在啟動時自動掛載Windows下的幾個分區(qū)。以前干過這些事情,所以也沒太當回事。
因為曾經(jīng)重裝過一次,所以/boot分區(qū)現(xiàn)在成了/boot1分區(qū),/分區(qū)成了/1分區(qū),在/etc/fstab表中我覺得不好看。所以修改的時候,我隨手把/boot1改成了/boot,/1改成了/。
結(jié)果再次重啟時,系統(tǒng)找不到這兩個分區(qū),自然也就啟動不了了。郁悶。
好在還有shell能用,prompt符為(Pepair filesystem) #。我又運行了 # vi /etc/fstab
想更改fstab文件。沒想到此時所用文件都是readonly,改不了了。欲哭無淚。
想了一會兒,突然記起可以進入rescue模式,或許能有辦法。于是那張救援盤有了用武之地了。
進入rescue模式后,執(zhí)行
# mount -t vfat /dev/hda9 /tmp
將那個無法自動掛載的/1分區(qū)隨便掛到了一個掛載點下,然后就能讀寫之了?;謴蚮stab文件,再次重啟,一切又正常了。
兩個教訓:修改配置文件時一定要謹慎,不要想當然的亂改;要有恢復手段,啟動盤或者救援盤一定要準備好。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
如何修復/etc/fstab
我mv /etc./fstab /etc/fstab.bak
重啟時,到(Repair filesystem)# 所有file只讀,如何讓它該為可寫,然后mv /etc/fstab.bak /etc/fstab, 讓它能正常啟動?
1 - - - - - - - - - - - - - - -
boot : linux rescue
# mkdir /mnt/image
# mount -t ext3 /dev/hda4 /mnt/image
一般是硬盤最后一個分區(qū)里面,我分區(qū)表如下:
[root@YYZH ~]# fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 1300 10241437+ 83 Linux
/dev/sda3 1301 2575 10241437+ 83 Linux
/dev/sda4 2576 5221 21253995 5 Extended
/dev/sda5 2576 3850 10241406 83 Linux
/dev/sda6 3851 3915 522081 82 Linux swap / Solaris
/dev/sda7 3916 5221 10490413+ 83 Linux
我掛載時用 mount -t ext3 /dev/sda7 /mnt/image 然后進入后vi fstab進行文件修改
cd /mnt/image/etc
cp fstab.bak fstab
2 - - - - - - - - - - - - - - -
rescue MODE
會MOUNT / 到/mnt/sysimage
3 - - - - - - - - - - - - - - -
rescue MODE
會MOUNT / 到/mnt/s
修改/etc/fstab實現(xiàn)自動掛載Windows分區(qū),并顯示中文目錄
LABEL=/ / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/usr /usr ext3 defaults 1 2
/dev/hda9 swap swap defaults 0 0
#添加如下幾行
/dev/hda1 /mnt/win_c vfat codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/win_d vfat codepage=936,iocharset=cp936 0 0
/dev/hda6 /mnt/win_e vfat codepage=936,iocharset=cp936 0 0
下面是一些文件說明
1. fstab文件的作用
文件/etc/fstab存放的是系統(tǒng)中的文件系統(tǒng)信息。當正確的設(shè)置了該文件,則可以通過”mount /directoryname”命令來加載一個文件系統(tǒng),每種文件系統(tǒng)都對應(yīng)一個獨立的行,每行中的字段都有空格或tab鍵分開。同時fsck、 mount、umount的等命令都利用該程序。
2. fstab文件格式
下面是/etc/fatab文件的一個示例行:
fs_spec fs_file fs_type fs_options fs_dump fs_pass
/dev/hda1 / ext2 defaults 1 1
fs_spec - 該字段定義希望加載的文件系統(tǒng)所在的設(shè)備或遠程文件系統(tǒng),對于一般的本地塊設(shè)備情況來說:IDE設(shè)備一般描述為 /dev/hdaXN,X是IDE設(shè)備通道(a, b, or c),N代表分區(qū)號;SCSI設(shè)備一描述為/dev/sdaXN。對于NFS情況,格式一般為:,例如:`knuth.aeb.nl:/’。對于procfs,使用`proc’來定義。
fs_file - 該字段描述希望的文件系統(tǒng)加載的目錄點,對于swap設(shè)備,該字段為none;對于加載目錄名包含空格的情況,用40來表示空格。
fs_type - 定義了該設(shè)備上的文件系統(tǒng),一般常見的文件類型為ext2 (Linux設(shè)備的常用文件類型)、vfat(Windows系統(tǒng)的fat32格式)、NTFS、iso9600等。
fs_options - 指定加載該設(shè)備的文件系統(tǒng)是需要使用的特定參數(shù)選項,多個參數(shù)是由逗號分隔開來。對于大多數(shù)系統(tǒng)使用”defaults”就可以滿足需要。其他常見的選項包括:
選項 含義
ro 以只讀模式加載該文件系統(tǒng)
sync 不對該設(shè)備的寫操作進行緩沖處理,這可以防止在非正常關(guān)機時情況下破壞文件系統(tǒng),但是卻降低了計算機速度
user 允許普通用戶加載該文件系統(tǒng)
quota 強制在該文件系統(tǒng)上進行磁盤定額限制
noauto 不再使用mount?。璦命令(例如系統(tǒng)啟動時)加載該文件系統(tǒng)
fs_dump - 該選項被”dump”命令使用來檢查一個文件系統(tǒng)應(yīng)該以多快頻率進行轉(zhuǎn)儲,若不需要轉(zhuǎn)儲就設(shè)置該字段為0
fs_pass - 該字段被fsck命令用來決定在啟動時需要被掃描的文件系統(tǒng)的順序,根文件系統(tǒng)”/”對應(yīng)該字段的值應(yīng)該為1,其他文件系統(tǒng)應(yīng)該為2。若該文件系統(tǒng)無需在啟動時掃描則設(shè)置該字段為0
3. 示例文件
# /etc/fstab
/dev/hda9 swap swap defaults 0 0
/dev/hda1 / ext2 defaults 1 1
/dev/hda5 /home ext2 defaults 1 1
/dev/hda6 /usr ext2 defaults 1 1
/dev/hda7 /usr/local ext2 defaults 1 1
/dev/hda8 /var ext2 defaults 1 1
/dev/hdb /cdrom iso9660 noauto,user 0 0
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
創(chuàng)建 /etc/fstab 文件
為了某些程序能確定某一個程序被加載的實際位置,文件 /etc/fstab 將被使用。通過以下方法建立一個新文件 /etc/fstab:
cat > /etc/fstab << ”EOF”
# Begin /etc/fstab
# filesystem mount-point fs-type options dump fsck-order
/dev/*LFS* / *fs-type* defaults 1 1
/dev/*swap* swap swap pri=1 0 0
proc /proc proc defaults 0 0
# End /etc/fstab
EOF
*LFS*, *swap* 和 *fs-type* 應(yīng)換成你系統(tǒng)中的值 (比如/dev/hda2, /dev/hda5 和 reiserfs)。
當增加一個reiserfs分區(qū)時,一行最后的 1 1 應(yīng)換成 0 0 。
要知道更多關(guān)于fstab文件中變量的信息,請看 man 5 fstab.
還有一些內(nèi)容也許你想加入到fstab文件中。如果你使用devpts的話,必須有下面這一行:
devpts /dev/pts devpts gid=4,mode=620 0 0
下面這個是你使用USB設(shè)備時要用到的:
usbdevfs /proc/bus/usb usbdevfs defaults 0 0
這兩個例子只有在你把相關(guān)的支持編譯到內(nèi)核中時才能工作。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/etc/fstab文件修改后可以自動掛載,并顯示中文目錄
這是我在網(wǎng)上找到的/etc/fstab文件修改后可以自動掛載,并顯示中文目錄,這個比較實用,希望大家能派上用場,下面就是例子。
# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
/dev/hdc2 / ext3 defaults,errors=remount-ro 0 1
/dev/hdc5 none swap sw 0 0
/dev/hdb /media/cdrom0 iso9660 ro,user,noauto 0 0
/dev/hda1 /mnt/win_c vfat codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/win_d ntfs iocharset=cp936 0 0
/dev/hda6 /mnt/win_e ntfs iocharset=cp936 0 0
/dev/hda7 /mnt/win_f vfat codepage=936,iocharset=cp936 0 0
/dev/hda8 /mnt/win_g vfat codepage=936,iocharset=cp936 0 0
/dev/hdc1 /mnt/win_h vfat codepage=936,iocharset=cp936 0 0
本文地址:http://www.keyofnet.com/?p=398 , 轉(zhuǎn)載請保留.
接上篇《centos系統(tǒng)出現(xiàn)IO錯誤》,悲劇的事情發(fā)生了,我用fsck并沒有解決該問題?。?/span>
開機過程中報了好多failure,包括mount failure、mysql start failure、samba failure…開機后,貌似一切正常,但是我知道這只是表面的,因為/目錄已經(jīng)是只讀模式了!
下面看看分區(qū)掛載情況吧:
[root@jst-cn ~]# more /etc/mtab
proc /proc proc rw 0 0
[root@jst-cn ~]# df -h
文件系統(tǒng) 容量 已用 可用 已用% 掛載點
[root@jst-cn ~]# more /etc/fstab
LABEL=/ /dev/sda2 ext3 defaults 1 1
LABEL=/other /other ext3 defaults 1 2
LABEL=/home /home ext3 defaults 1 2
LABEL=/tmp /tmp ext3 defaults 1 2
LABEL=/test /test ext3 defaults 1 2
LABEL=/www /www ext3 defaults 1 2
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/tools /tools ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
LABEL=/data /data ext3 defaults 1 2
LABEL=/backup /backup ext3 defaults 1 2
LABEL=/opt /opt ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda14 swap swap defaults 0 0
[root@jst-cn ~]# more /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 ro,data=ordered 0 0
/dev /dev tmpfs rw 0 0
/proc /proc proc rw 0 0
/sys /sys sysfs rw 0 0
/proc/bus/usb /proc/bus/usb usbfs rw 0 0
devpts /dev/pts devpts rw 0 0
/dev/sda15 /other ext3 rw,data=ordered 0 0
/dev/sda12 /home ext3 rw,data=ordered 0 0
/dev/sda11 /tmp ext3 rw,data=ordered 0 0
/dev/sda10 /test ext3 rw,data=ordered 0 0
/dev/sda9 /www ext3 rw,data=ordered 0 0
/dev/sda8 /usr ext3 rw,data=ordered 0 0
/dev/sda7 /tools ext3 rw,data=ordered 0 0
/dev/sda6 /var ext3 rw,data=ordered 0 0
/dev/sda5 /data ext3 rw,data=ordered 0 0
/dev/sda3 /backup ext3 rw,data=ordered 0 0
/dev/sda2 /opt ext3 rw,data=ordered 0 0
/dev/sda1 /boot ext3 rw,data=ordered 0 0
[root@jst-cn ~]# mount -o remount,rw /
mount: can’t find / in /etc/fstab or /etc/mtab
[root@jst-cn ~]# mount -o remount,rw /dev/root
mount: can’t find /dev/root in /etc/fstab or /etc/mtab
[root@jst-cn ~]# mount -o remount,rw /dev/sda2
mount: /dev/sda2 not mounted already, or bad option
[root@jst-cn ~]# mount -f
proc on /proc type proc (rw)
mount: warning /etc/mtab is not writable (e.g. read-only filesystem).
It’s possible that information reported by mount( is not
up to date. For actual information about system mount points
check the /proc/mounts file.
[root@jst-cn ~]# mount -a
mount: /dev/sda13 already mounted or /dev/sda2 busy
mount: /dev/sda15 already mounted or /other busy
mount: /dev/sda12 already mounted or /home busy
mount: /dev/sda11 already mounted or /tmp busy
mount: /dev/sda10 already mounted or /test busy
mount: /dev/sda9 already mounted or /www busy
mount: /dev/sda8 already mounted or /usr busy
mount: /dev/sda7 already mounted or /tools busy
mount: /dev/sda6 already mounted or /var busy
mount: /dev/sda5 already mounted or /data busy
mount: /dev/sda3 already mounted or /backup busy
mount: /dev/sda2 already mounted or /opt busy
mount: /dev/sda1 already mounted or /boot busy
mount: devpts already mounted or /dev/pts busy
mount: sysfs already mounted or /sys busy
[root@jst-cn ~]# vim /var/log/messages
Jan 8 15:24:35 jst-cn smartd[3019]: smartd version 5.38 [i686-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Jan 8 15:24:35 jst-cn smartd[3019]: Home page is http://smartmontools.sourceforge.net/
Jan 8 15:24:35 jst-cn smartd[3019]: Opened configuration file /etc/smartd.conf
Jan 8 15:24:35 jst-cn smartd[3019]: Configuration file /etc/smartd.conf was parsed, found DEVICESCAN, scanning devices
Jan 8 15:24:35 jst-cn smartd[3019]: Problem creating device name scan list
Jan 8 15:24:35 jst-cn smartd[3019]: Device: /dev/sda, opened
Jan 8 15:24:35 jst-cn smartd[3019]: Device /dev/sda: using ‘-d sat’ for ATA disk behind SAT layer.
Jan 8 15:24:35 jst-cn smartd[3019]: Device: /dev/sda, opened
Jan 8 15:24:35 jst-cn smartd[3019]: Device: /dev/sda, not found in smartd database.
Jan 8 15:24:36 jst-cn smartd[3019]: Device: /dev/sda, is SMART capable. Adding to "monitor" list.
Jan 8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdb, opened
Jan 8 15:24:36 jst-cn smartd[3019]: Device /dev/sdb: using ‘-d sat’ for ATA disk behind SAT layer.
Jan 8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdb, opened
Jan 8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdb, found in smartd database.
Jan 8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdb, is SMART capable. Adding to "monitor" list.
Jan 8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdc, opened
Jan 8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdc, Bad IEC (SMART) mode page, err=2, skip device
Jan 8 15:24:36 jst-cn smartd[3019]: Monitoring 0 ATA and 2 SCSI devices
Jan 8 15:24:36 jst-cn avahi-daemon[2989]: Server startup complete. Host name is jst-cn.local. Local service cookie is 1542459542.
Jan 8 15:24:36 jst-cn smartd[3021]: smartd has fork()ed into background mode. New PID=3021.
很簡單的看出來/etc/fstab分區(qū)掛載出問題了,/目錄掛載到/opt所在的分區(qū)/dev/sda2上面了!然后結(jié)合more /proc/mounts和fdisk -l可以看出來:/目錄所在分區(qū)應(yīng)該是/dev/sda13(因為此時的df -h命令已經(jīng)無效了)!
所以目前的工作就修改/etc/fstab中錯誤的分區(qū)信息!下面是操作步驟:
1、重啟系統(tǒng),用安裝光盤centos5.4引導進入linux rescue模式,就是在光盤啟動進入安裝界面時,輸入linux rescue回車,一直點OK,直到進入shell模式!(這時,我遇見比較悲劇的事情——光驅(qū)壞了!只好到其他機子上拆一個過來。)
2、進入shell模式后,我們直接進入系統(tǒng)掛載的目錄/mnt/sysimage/dev/,貌似linux recuse模式系統(tǒng)一般是掛載在這里的!
3、然后我們編輯/mnt/sysimage/dev/etc/fstab文件,將錯誤的/掛載修改回來:
錯誤的/掛載是:LABEL=/ /dev/sda2 ext3 defaults 1 1
正確的/掛載是:LABEL=/ / ext3 defaults 1 1
4、wq保存退出,reboot,拿出光盤,正常進入系統(tǒng)——沒有報錯了!搞定??!
后記:
這次linux分區(qū)變成只讀模式,給我造成了很大的困擾,都已經(jīng)備份數(shù)據(jù)準備重新安裝系統(tǒng)了——因為是內(nèi)網(wǎng)服務(wù)器,不可能給我很長的時間去找google然后解決問題,重裝無疑是耗時最短的。
不過我還是堅持將所知道的方案,一個又一個的進行測試,盡量使問題能得到解決。因為如果只是簡單的重裝解決問題,那么下次遇到同樣的問題,我還是不會解決!
幸好,這次問題得到順利解決,并讓我學到了linux rescue這個知識點,相信再次遇到相同/相關(guān)的問題,我會順利去解決的!