u盘文件系统问题
一、现象分析
之前在操作U盘时候,出现不能挂载,应该文件系统出现bug。在xp下面也不能格式化。后来在ubuntu下试试,也是不可以挂载。挂载时候报, /dev/sdf4 bad superblock error。
整个尝试流程:
1.检查ext文件系统的正确性
sudo e2fsck /dev/sdf4
结果如下:
e2fsck 1.41.11 (14-Mar-2010)
e2fsck: 超级块无效, trying backup blocks...
e2fsck: Bad magic number in super-block 当尝试打开 /dev/sdf4 时
The 超级块 could not be read or does not describe a correct ext2
文件系统. If the 设备 is valid and it really contains an ext2
文件系统 (and not swap or ufs or something else), then the 超级块
is corrupt, and you might try running e2fsck with an alternate 超级块:
e2fsck -b 8193 <设备>
2.重设superblock
sudo e2fsck -b 8193 /dev/sdf4
显示信息如下:
e2fsck 1.41.11 (14-Mar-2010)
e2fsck: Bad magic number in super-block 当尝试打开 /dev/sdf4 时
The 超级块 could not be read or does not describe a correct ext2
文件系统. If the 设备 is valid and it really contains an ext2
文件系统 (and not swap or ufs or something else), then the 超级块
is corrupt, and you might try running e2fsck with an alternate 超级块:
e2fsck -b 8193 <设备>
这个命令执行没有效果,汗
3.检测
sudo e2fsck -f /dev/sdf4
信息:
e2fsck 1.41.11 (14-Mar-2010)
e2fsck: 超级块无效, trying backup blocks...
e2fsck: Bad magic number in super-block 当尝试打开 /dev/sdf4 时
The 超级块 could not be read or does not describe a correct ext2
文件系统. If the 设备 is valid and it really contains an ext2
文件系统 (and not swap or ufs or something else), then the 超级块
is corrupt, and you might try running e2fsck with an alternate 超级块:
e2fsck -b 8193 <设备>
后来想想干脆格式化得了。
4.格式化,我将其格式成vfat文件系统
sudo mkfs -V -t vfat /dev/sdf4
信息:
mkfs (util-linux-ng 2.17.2)
mkfs.vfat /dev/sdf4
mkfs.vfat 3.0.7 (24 Dec 2009
命令执行没有异常
5.检查vfat文件系统
sudo fsck -a -V -t vfat /dev/sdf4
信息如下:
fsck from util-linux-ng 2.17.2
[/sbin/fsck.vfat (1) -- /dev/sdf4] fsck.vfat -a /dev/sdf4
dosfsck 3.0.7, 24 Dec 2009, FAT32, LFN
/dev/sdf4: 0 files, 1/1957125 clusters
此命令执行OK,U盘正常工作了。
二、关于文件系统一些基本点
用下列命令查看前Linux内核提供了对哪些文件系统的支持
cat /proc/filesystems
如下:
nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev pipefs
nodev anon_inodefs
nodev inotifyfs
nodev devpts
ext3
ext2
ext4
nodev ramfs
nodev hugetlbfs
nodev ecryptfs
nodev fuse
fuseblk
nodev fusectl
nodev mqueue
nodev binfmt_misc
vfat
查看/etc/fstab内容,
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
/dev/sda1 / ext4 errors=remount-ro 0 1
/dev/sda5 none swap sw 0 0
这个文件描述系统中各种文件系统的信息。一般而言,应用程序仅读取这个文件,而不对它进行写操作。对它的维护是系统管理员的工作。在这个文件中,每个文件系统用一行来描述,在每一行中,用空格或TAB符号来分隔各个字段,文件中以#开头的行是注释信息。Fstab文件中的纪录的排序十分重要。因为fsck,mount或umount等程序在做它们的工作时会按此顺序进行。
三、接下来,列出一些文件系统操作命令
1.fdisk
fdisk命令用来进行磁盘分区。
使用权限:超级用户。
格式:fdisk [-l] [-b SSZ] [-u] device
主要选项:
-l: 察看指定的设备的分区表状况。
-b SSZ:将指定的分区大小输出到标准输出上,单位为区块。
-u:搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址。
device:要这些操作的设备名称。
应用说明:
fdisk是各种Linux发行版本中最常用的分区工具,是被定义为Expert级别的分区工具。它还包括一个二级选单,首先输入命令,然后出现问答式界面,用户通过在这个界面中输入命令参数来操作fdisk。
选单详细介绍:
a:设定硬盘启动区。
b:编辑一个BSD类型分区。
c:编辑一个DOS兼容分区。
d: 删除一个分区。
l: 察看指定的设备的分区表状况。
m:显示Fdisk命令各个参数的说明。
o:创建一个DOS分区。
n:设定新的硬盘分区。
p:打印分区信息。
s:创建一个空Sun分区表。
t:改变硬盘分区类型。
q: 结束分区,不保存操作内容。
v:校验硬盘分区表。
w:结束分区,保存操作内容。
x:进入高级操作模式。
2.mkfs
mkfs命令用来在Linux下建立各种文件系统,也即是格式化命令
使用权限:超级用户。
格式:
mkfs [-V] [-t fstype] [fs-options] device [size]
主要选项:
-V:输出帮助信息。
-t fstype: 指定要建立何种文件系统。如没有任何指定,则使用缺省的文件系统类型(目前是 ext2)。
fs-options:传递给实际的文件系统制作工具的文件系统相关的选项。
size:是指该文件系统用的区块数。
device:既可以是设备名,(如: /dev/hda1, /dev/sdb2) 也可以是文件系统的挂载点,(如: /, /usr, /home)。
应用说明:
mkfs命令本身并不执行建立文件系统的工作,它是在 Linux下各文件系统专用程序(mkfs.fstype)的前端程序。各文件系统专用程序可以在/sbin、/sbin/fs、/sbin/fs.d等目录中找到。主要包括:mkfs.dos用来创—OS文件系统。mkfs.reiserfs用来创建reiserfs文件系统。mkfs.jfs用来创建jfs文件系统。mkfs.vfat用来创建vfat文件系统。
出于对Linux各个发行版本的兼容性,对于建立同一Linux文件系统的命令可能有不同命令名称,实际功能是相同的,如mkfs.ext2、mkfs.ext3、mke2fs都是用来创建ext2/ext3文件系统。
3.mkfs.ext2
mkfs.ext2命令用来建立一个ext2/ext3文件系统。
使用权限:超级权限。
格式:
mkfs.ext2 [选项] device [blocks]
主要选项:
-b block-size:指定区块大小,单位为字节。
-f fragment-size:指定不连续区段的大小,单位为字节。
-F:强制执行mke2fs命令。
-c:检查是否有损坏的区块。
-L volume-label:设置分区的卷标(最长11个字符)。
-M last-mounted-directory:记录最后一次挂入的目录。
-m reserved-blocks-percentage:指定给管理员保留区块的比例,确省值5%,这是Unix默认值的一半。
-N number-of-inodes:指定要建立的inode数目。
-i bytes-per-inode:指定"字节/inode"的比例。
-j:建立一个ext3日志文件系统。
-r fs-revision:指定要建立的ext2文件系统版本。
-l filename:从指定的文件中,读取文件系统损坏区块的信息。
-R raid_opts:设置磁盘阵列参数。
-q: 执行时不显示任何信息。
-v: 执行时显示详细信息。
device:设备名称。
blocks:区块数。
4.fsck
fsck命令用来检查文件系统并尝试修复错误。
使用权限:所有用户。
格式:fsck [选项] [ -t fstype ] device
主要选项:
-a: 自动修复文件系统,不询问任何问题。
-A: 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。
-N: 不执行指令,仅列出实际执行会进行的动作。
-P: 当搭配"-A"参数使用时,则会同时检查所有的文件系统。
-r : 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式。
-R: 当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查。
-s: 依序执行检查作业,而非同时执行。
-t fstype: 指定要检查的文件系统类型。
-T: 执行fsck指令时,不显示标题信息。
-V: 显示指令执行过程。
应用说明:
和mkfs命令类似,fsck是在 Linux各文件系统检查程序(fsck.fstype)的前端程序。出于对Linux各个发行版本的兼容性,检查ext2/ext3文件系统的命令可能有不同命令名称,实际功能是相同的,如fsck.ext2、fsck.ext3、e2fsck都是用来检查ext2/ext3文件系统。
5. fsck.ext2
fsck.ext2命令用来检查ext2/ext3文件系统并尝试修复错误。
使用权限:所有用户。
格式:
fsck.ext2 [-panyrcdfvstDFSV]] [-b superblock] [-B blocksize]
[-P process_inode_size][-j ext-journal] [-l|-L bad_blocks_file ] [-C fd] device
主要选项:
-a : 自动修复文件系统,不询问任何问题。
-p:和指定"-a"参数相同。
-c: 检查指定的文件系统内,是否存在有损坏的区块。
-d: 详细显示指令执行过程。
-f: 强制对该文件系统进行完整检查。
-F: 检查文件系统之前,先清理该保存设备块区内的数据。
-n: 把所有需要检查的文件系统设成只读,关闭互动模式。
-s: 检查文件系统时,交换每对字节的内容。
-S: 此参数的效果和指定"-s"参数类似,但不论该文件系统是否已是标准位顺序,一律交换每对字节的内容。
-t: 显示fsck.ext2命令的执行顺序信息。
-y: 关闭互动模式,且同意所有询问的问题。
-b superblock:指定分区的第一个磁区的起始地址,也就是超级块(Super Block)。
-B blocksize:设置该分区每个区块的大小。
-C fd:指定反叙述器,fsck.ext2指令会把全部的执行过程,全部逆向叙述。
-I inode_buffer_blocks:设置需要检查的文件系统的inode缓冲区的区块数目。
-l bad_blocks_file:把文件中所列出的区块,视为损坏区块并将其标示出来,避免应用程序使用该区块。
-P process_inode_size:设置fsck.ext2命令所能处理的inode大小为多少。
-j ext-journal:为ext3日志文件系统设置路径。
6.sync
sync命令用来将内存缓冲区内的数据写入磁盘。
使用权限:所有用户。
格式:
sync
应用说明:在Linux系统中,当数据需要存入磁盘时,通常会先放到缓冲区内,等到适当的时刻再写入磁盘,如此可提高系统的执行效率。
7.e2label
e2label命令用来设定或显示ext2或ext3分区的卷标。
使用权限:超级用户。
格式:
e2label device [ new-label ]
主要选项:
device:分区设备名称。
new-label:新设定的卷标名称。不能超过16字符
8.findfs
findfs命令用来查找指定卷标的文件系统。
使用权限:超级用户。
格式:
findfs LABEL=<label>
findfs UUID=<uuid>
主要选项:
LABEL=<label> :卷标名称。
UUID=<uuid>:分区的UUID号。
应用说明:随着Linux系统中硬盘容量和数目的增加,Linux系统中分区数量也越来越多,使用findfs命令可以通过卷标名称或UUID号快速定位分区位置。
9.badblock
badblock 命令用来检查磁盘中损坏的区块。
使用权限:超级用户。
格式:
badblocks [-b block_size] [-i input_file] [-o output_file] [-svw]
[-c blocks_at_once] [-p num_passes] device [last_block [start_count]
主要选项:
-b block_size:指定磁盘的区块大小,单位为字节。
-i input_file:读出上次的检查的结果中的坏块列表。
-o output_file:将检查的结果写入指定的输出文件。
-s: 在检查时显示进度。
-v: 执行时显示详细的信息。
-w: 在检查时,执行写入测试。
-c blocks_at_once:每个区块检查次数。确省值16次。
-p num_passes:通过的数量。确省值0。
start_count:指定要从哪个区块开始检查。
last_block:指定结束检查的区块。
device:指定要检查的磁盘装置
四、 总结
对于这些命令,需要实践。对于什么情况下用什么命令,这个需要分析。