Linux磁盘及文件系统管理

时间:2023-04-29 13:35:26

在LINUX中我们知道一个很重要的概念,那就是"一切皆文件",这里的一切表示所有在LINUX系统的对象,自然也包括了LINUX中的硬盘设备。在LINUX中所有设备都被抽象成一个文件,保存在/dev目录下。

LINUX系统中硬盘设备名称一般为hd[a-z]或sd[a-z](a-z为分区号),如hda,hdb,sda,sdb

那么这种不同的设备名有什么区别?
在LINUX中IDE设备都会被抽象成hd[a-z]名称的文件,STAT、SCSI、SAS、USB等设备都会被抽象成sd[a-z]名称的文件。
备注:IDE是数据传输方式,即并行。并行就像高速公路的多个车道,串行就是多人排对过独门桥。
IDE设备在电脑中主要是并口硬盘和光驱,现在全被串口代替,即ATA硬盘,串口的用SATA来表示。并口硬盘读写速度约80M每秒最大,而串口已达到150多M每秒。

例如:我们系统中现在有一块硬盘,那么在LINUX中的抽象文件为/dev/sda    增加一块硬盘就为抽象成文件/dev/sdb

当然在系统中我们看到/dev/sda或/dev/sdb现在还是不能用的,这块硬盘就一个裸设备,还需要分区,这就像我们普通windows上一块硬盘上分为c盘,d盘一样 ,硬盘的分区其本质就是给硬盘安装文件系统。将硬盘分为几个区后,每个区都可以当作独立磁盘,方便我们使用管理。在本文中我们也会介绍分区的方法。

分区命名的规则:设备名称+分区号,如sda1、sda2等。

Linux磁盘及文件系统管理

2.硬盘的分区机制

目前主流的分区机制分为MBR和GPT两种

所谓MBR就是main boot loader(主引导记录),这种分区方式在硬盘前面有一个分区表,分区表大小为64字节,其中每16字节可以定义一个分区, 所以MBR分区表最多有4个分区。

但是电脑的硬盘大小是在飞速增长的,4个分区显然不能满足使用的需求了,所以就有了MBR分区表的多分区方案——逻辑驱动器(逻辑分区)。 提起逻辑分区就不得不说一下MBR分区下分区的类型。在MBR格式的分区下分区有两种,主分区和扩展分区。 主分区可以直接在我的电脑中访问而扩展分区必须分成若干个逻辑驱动器,逻辑驱动器是可以直接在电脑中访问的。 由于MBR分区表对分区数的限制,最多分4个主分区或者3个主分区+一个扩展分区。

MBR(Master Boot Record)是传统的分区机制,应用于绝大多数使用BIOS(基本输入输出系统)引导的PC设备(苹果使用EFI的方式); 很多Server服务器即支持BIOS也支持EFI的引导方式

MBR分区的特点:

<1>MBR支持32bit和64bit系统;

<2>MBR支持的分区数量有限制;

<3>MBR支持的分区数量有限制;

<4>MBR只支持不超过2TB的硬盘,超过2TB的硬盘只能使用2TB的空间(有第三方解决方法)

Linux磁盘及文件系统管理

如上图MBR一共占用硬盘最开头的512字节,其中前446字节为:引导代码(Bootstrap Code Area)(引导不同的操作系统;不同操作系统,引导代码是不一样的),接下来的为4个16字节:分别对应4个主分区表信息(Primary Partition Table),最后2个字节:为启动标示(Boot Signature),永远都是55和AA;55和AA是个永久性的标示,代表这个硬盘是可启动的。

使用MBR分区机制的硬盘分区分为:主分区、扩展分区、逻辑分区

主分区:一块硬盘最多只能创建4个主分区(因为在MBR分区表结构中最多可以创建4个主分区表信息,也就是4个16字节的空间,如上图)

扩展分区:一个扩展分区会占用一个主分区的位置(因为在MBR分区表结构中最多可以创建4个主分区表信息,所以拿出来一个主分区作为扩展分区)

逻辑分区:

<1>是基于扩展分区创建出来的,先有扩展分区,然后在扩展分区的基础上再创建逻辑分区;也就是说我们要使用逻辑分区,必须先要创建扩展分区;

<2>扩展分区的空间是不能被直接使用的,我们必须在扩展分区的基础上去建立逻辑分区,才能够被使用;

<3>Linux最多支持63个IDE分区和15个SCSI分区

PEL:Primary Partition;Extended Partition;Logical Partition

Linux磁盘及文件系统管理

-------------------------
所谓GPT就是guid partition table(全局分区标识符),是一个较新的分区机制,解决了MBR的很多缺点。
GRP分区的特点:
<1>支持超过2TB的磁盘:GPT有64bit寻址空间;而MBR对硬盘空间地址寻址最多只支持32bit,2的32次方,硬盘空间是以地址方式来被识别的,所以MBR只支持容量为2TB以内的磁盘
<2>向后兼容MBR
<3>但是底层硬件必须支持UEFI(Intel提出的取代BIOS的新一代的引导系统)才能使用,也就是底层硬件必须使用UEFI
<4>必须使用64位操作系统
<5>Mac、LInux系统都能支持GPT分区格式
<6>Windows 7 64bit、Windows Server2008 64bit支持GPT

以上文章   部分参考于http://www.linuxidc.com/Linux/2013-06/85717.htm

3.硬盘分区演示

经过上面的了解下面将进行一下LINUX下磁盘分区的演示,我们将利用fdisk工具进行磁盘分区,fdisk是来自IBM的比较老的分区工具,支持绝大数操作系统,几乎所有的LINUX的发行版本都装有fdisk软件,包括在LINUX的rescue模式下的依然能够使用。

LINUX的rescue模式: http://www.cnblogs.com/myrunning/p/4246104.html
在LINUX下fdisk命令只有具有超级用户的权限才能够运行。

需要注意的是fdisk是一个基于MBR分区机制的工具,如果磁盘分区需要使用GPT,则无法使用fdisk工具

下面我们将演示创建一个主分区和扩展分区并在扩展分区上创建逻辑分区:

<1>在虚拟机中手动增加一块硬盘

Linux磁盘及文件系统管理

Linux磁盘及文件系统管理

<2>启动系统看到映射到的硬盘文件

[root@edu ~]# fdisk -l

Disk /dev/sda: 21.4 GB,  bytes
heads, sectors/track, cylinders --列出/dev/sda有多少磁头多少扇区多少柱面,通过这里也能计算出磁盘大小
Units = cylinders of * = bytes Device Boot Start End Blocks Id System
/dev/sda1 * Linux
/dev/sda2 + Linux swap / Solaris Disk /dev/sdb: 21.4 GB, bytes
heads, sectors/track, cylinders
Units = cylinders of * = bytes Device Boot Start End Blocks Id System --start/end表示起始柱面/结束柱面 Blocks表示了大小 Id代表为分区的类型
/dev/sdb1 + Linux Disk /dev/sdc: MB, bytes --这里看到/dev/sdc磁盘 8个G 就是我们刚才增加的磁盘,没有任何分区
heads, sectors/track, cylinders
Units = cylinders of * = bytes Disk /dev/sdc doesn't contain a valid partition table

<3>对/dev/sdc进行分区

[root@edu ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable. The number of cylinders for this disk is set to .
There is nothing wrong with that, but this is larger than ,
and could in certain setups cause problems with:
) software that runs at boot time (e.g., old versions of LILO)
) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/ FDISK)
Warning: invalid flag 0x0000 of partition table will be corrected by w(rite) Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition --增加分区
o create a new empty DOS partition table
p print the partition table --列出分区
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id --改变分区类型ID
u change display/entry units
v verify the partition table
w write table to disk and exit --保存分区修改
x extra functionality (experts only) Command (m for help): n
Command action
e extended --代表创建扩展分区
p primary partition (-) --代表创建主分区
p
Partition number (-):
First cylinder (-, default ):
Last cylinder or +size or +sizeM or +sizeK (-, default ): +2G Command (m for help): p Disk /dev/sdc: MB, bytes
heads, sectors/track, cylinders
Units = cylinders of * = bytes Device Boot Start End Blocks Id System
/dev/sdc1 + Linux Command (m for help): n
Command action
e extended
p primary partition (-)
e --创建扩展分区
Partition number (-): --主分区已经有1了,所以现在扩展分区号只能从2开始,我们把剩下的都给了扩展分区
First cylinder (-, default ):
Using default value
Last cylinder or +size or +sizeM or +sizeK (-, default ):
Using default value Command (m for help): p Disk /dev/sdc: MB, bytes
heads, sectors/track, cylinders
Units = cylinders of * = bytes Device Boot Start End Blocks Id System
/dev/sdc1 + Linux
/dev/sdc2 Extended --发现已经创建了扩展分区/dev/sdc2,我们知道扩展分区是不能直接使用的,需要在扩展分区上划分逻辑分区才能使用 Command (m for help): n
Command action
l logical ( or over) --创建逻辑分区的选项出现了,(有扩展分区,才会允许出现创建逻辑分区),我现在创建逻辑分区,不论主分区号排到几号,逻辑分区号都是从5往后排
p primary partition (-)
l
First cylinder (-, default ):
Using default value
Last cylinder or +size or +sizeM or +sizeK (-, default ): +2G Command (m for help): p Disk /dev/sdc: MB, bytes
heads, sectors/track, cylinders
Units = cylinders of * = bytes Device Boot Start End Blocks Id System
/dev/sdc1 + Linux
/dev/sdc2 Extended
/dev/sdc5 + Linux Command (m for help): n
Command action
l logical ( or over)
p primary partition (-)
l
First cylinder (-, default ):
Using default value
Last cylinder or +size or +sizeM or +sizeK (-, default ):
Using default value Command (m for help): p Disk /dev/sdc: MB, bytes
heads, sectors/track, cylinders
Units = cylinders of * = bytes Device Boot Start End Blocks Id System
/dev/sdc1 + Linux
/dev/sdc2 Extended
/dev/sdc5 + Linux
/dev/sdc6 + Linux --最后我们创建了4G的逻辑分区/dev/sdc6 Command (m for help): w --最后我们把已经确认分好的分区写入磁盘分区表,分区才能最终生效
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.

<4>验证、查看刚才创建的分区

[root@edu ~]# ll /dev/sdc*
brw-r----- root disk , Jan : /dev/sdc
brw-r----- root disk , Jan : /dev/sdc1
brw-r----- root disk , Jan : /dev/sdc2
brw-r----- root disk , Jan : /dev/sdc5
brw-r----- root disk , Jan : /dev/sdc6

注意:当我们做完磁盘分区的时候,查看/dev/不一定能够看到分区结果,这是因为/dev/下的文件是内核来创建的,内核有时候在启动系统的时候更新一次就不再更新了,所以有时候我们需要使用partprobe命令让内核更新一下分区信息,使用partprobe命令后表示我们做的分区已经被写入磁盘了而且已经被当前的系统给探测到了

[root@edu ~]# partprobe
[root@edu ~]# ll /dev/sdc*
brw-r----- root disk , Jan : /dev/sdc
brw-r----- root disk , Jan : /dev/sdc1
brw-r----- root disk , Jan : /dev/sdc2
brw-r----- root disk , Jan : /dev/sdc5
brw-r----- root disk , Jan : /dev/sdc6

其实我们还可以查看/proc/partitions查看磁盘分区信息,/proc/partitions文件反映了当前系统的实时分区信息

[root@edu ~]# cat /proc/partitions
major minor #blocks name sda
sda1
sda2
sdb
sdb1
sdc
sdc1
sdc2
sdc5
sdc6

4.为磁盘创建文件系统

通过上面第3小节的实验我们在第三块盘上创建了/dev/sdc1/、/dev/sdc2、/dev/sdc5、/dev/sdc6四个分区,这些分区目前都还没不能被使用,这是因为这些分区都还没有安装文件系统,还是属于裸设备(raw设备),只有为这些分区安装文件系统,操作系统才能通过文件系统管理文件及数据,才能够为操作系统锁使用,创建文件系统的过程我们称之为格式化。

目前常见的文件系统主要有fat32、NTFS、ext2、ext3、ext4、xfs、HFS等,其中NTFS是目前windows系统主流的文件统,ext3/ext4 则是目前linux系统主流的文件。这些文件系统主要在日志、支持的分区大小、
支持的单个文件的大小、性能等方面有差异(主要是性能方面)。

Linux 系统核心支持十多种文件系统类型:jfs,ReiserFS,ext,ext2,ext3,iso9660,xfs,minx,msdos,umsdos,Vfat,NTFS,Hpfs,Nfs,smb,sysv,proc 等.

ext: ext 是第一个专门为 Linux 的文件系统类型,叫做扩展文件系统.
ext2: ext2 是为解决 ext 文件系统的缺陷而设计的可扩展的高性能的文件系统.又被称为 二级扩展文件系统
ext3: ext3 是由开放资源社区开发的日志文件系统,. ext3 被设计成是 ext2 的升级版本。
jsf: jsf 提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的。
ReiserFS: ReiserFS 基于平 衡树结构的 、ReiserFS 文件系统在网上公布.ReiserFS 3.6.x(作为 Linux 2.4 一部分 的版本),设计成员相信最好的文件系统是那些能够有助于创建独立的共享环境或者命名空间的文件系统。
Xfs: xfs 是一种非常优秀的日志文件系统,它是 SGI 公司设计的.xfs 被称为业界最先进 的,最具可升级性的文件系统技术.它是 一个全 64 位,快速,稳固的日志文件系统.
Minix:Llnux 支持的第一个文件系统,对用户有很多限制而且性能低下Xia:Minix 文件系统修正后的版本.在一定程度上解决了文件名和文件系统大小的
Msdos:msdos 是在 Dos,Windows 和某些 OS/2 操作系统上使用的一种文件系 统,其名称采用"8+3"的形式,即 8 个字符的文件名加上 3 个字符的扩展名.
umsdos:Linux 下的扩展 msdos 文件系统驱动,支持长文件名,所有者,允许 权限,连接和设备文件.允许一个普通的 msdo s 文件系统用于 Linux,而且无须为它建 立单独的分区名.
iso9660: 标准 CDROM 文件系统,通用的 Rock Ridge 增强系统,允许长文件
Vfat:vfat 是 Windows9x 和 Windows NT/2000 下使用的一种 Dos 文件系统, 其在 Dos 文件系统的基础上增加了对长文件名的支持.
Nfs:Sun 公司推出的网络文件系统,允许多台计算机之间共享同一文件系统,易 于从所有这些计算机上存取文件.
Hpfs: High Performance File System(HPFS) 高性能文件系统(HPFS) HPFS 是 Microsoft 的 LAN Manager 中的文件系统,同时也是 IBM 的 LAN Server 和 OS/2 的文件系统.HPFS 能访问较大的硬盘驱动器,提供更多的组织特性并改善了文件系统的安全特性.
Smb:smb 是一种支持 Windows for workgroups,Windows NT 和 Lan Man ager 的基于 SMB 协议的网络操作系统.
Sysv:sysv 文件系统实际上是 System V/Coherent 在 Linux 平台上的文件系统.
Ncpfs:ncpfs 是一种 Novell NetWare 使用的 NCP 协议的网络操作系统.
Proc:proc 是 Linux 系统中作为一种伪文件系统出现的,它用来作为连接内核数据 结构的界面.
NTFS:微软 Windows NT 内核的系列操作系统支持的,一个特别为网络和磁盘配 额,文件加密等管理安全特性设计的磁盘格式.

查看Linux支持哪些文件系统 进入/lib/modules/2.6.18-194.el5/kernel/fs/目录,执行ls命令

[root@edu ~]# cd /lib/modules/2.6.-.el5/kernel/fs
[root@edu fs]# ll
total
drwxr-xr-x root root May autofs4
drwxr-xr-x root root May cachefiles
drwxr-xr-x root root May cifs
drwxr-xr-x root root May configfs
drwxr-xr-x root root May cramfs
drwxr-xr-x root root May dlm
drwxr-xr-x root root May ecryptfs
drwxr-xr-x root root May exportfs
drwxr-xr-x root root May ext3
drwxr-xr-x root root May ext4
drwxr-xr-x root root May fat
drwxr-xr-x root root May freevxfs
drwxr-xr-x root root May fscache
drwxr-xr-x root root May fuse
drwxr-xr-x root root May gfs2
drwxr-xr-x root root May hfs
drwxr-xr-x root root May hfsplus
drwxr-xr-x root root May jbd
drwxr-xr-x root root May jbd2
drwxr-xr-x root root May jffs2
drwxr-xr-x root root May lockd
drwxr-xr-x root root May msdos
drwxr-xr-x root root May nfs
drwxr-xr-x root root May nfs_common
drwxr-xr-x root root May nfsd
drwxr-xr-x root root May nls
drwxr-xr-x root root May squashfs
drwxr-xr-x root root May udf
drwxr-xr-x root root May vfat

<1>使用mke2fs命令创建文件系统

mke2fs -t ext4 /dev/sdc1

mke2fs(make ext2 file system)

功能说明:建立ext2文件系统。

参  数:

-b<区块大小>   指定区块大小,单位为字节。

-c   检查是否有损坏的区块。

-f<不连续区段大小>   指定不连续区段的大小,单位为字节。

-F   不管指定的设备为何,强制执行mke2fs。

-i<字节>   指定"字节/inode"的比例。

-N<inode数>   指定要建立的inode数目。

-l<文件>   从指定的文件中,读取文件西中损坏区块的信息。

-L<标签>   设置文件系统的标签名称。

-m<百分比值>   指定给管理员保留区块的比例,预设为5%。

-M   记录最后一次挂入的目录。

-q   执行时不显示任何信息。

-r   指定要建立的ext2文件系统版本。

-R=<区块数>   设置磁盘阵列参数。

-S   仅写入superblock与group descriptors,而不更改inode able inode bitmap以及block bitmap。

-v   执行时显示详细信息。

-V   显示版本信息。

-t  制定需要创建的文件系统 (高版本可用)

[root@edu ~]# mke2fs  /dev/sdc1
mke2fs 1.39 (-May-)
Filesystem label=
OS type: Linux
Block size= (log=)
Fragment size= (log=)
inodes, blocks
blocks (5.00%) reserved for the super user
First data block=
Maximum filesystem blocks=
block groups
blocks per group, fragments per group
inodes per group
Superblock backups stored on blocks:
, , , , Writing inode tables: done
Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every mounts or
days, whichever comes first. Use tune2fs -c or -i to override.

<2>使用mkfs命令创建文件系统
命令mkfs也可用于创建文件系统,相对于mke2fs命令较简单,支持的参数较少,不能进行精细化管理控制

mkfs.ext3 /dev/sdc1
mkfs.ext4 /dev/sdc1
mkfs.vfat /dev/sdc1

[root@edu ~]# mkfs.ext3 /dev/sdc5
mke2fs 1.39 (-May-)
Filesystem label=
OS type: Linux
Block size= (log=)
Fragment size= (log=)
inodes, blocks
blocks (5.00%) reserved for the super user
First data block=
Maximum filesystem blocks=
block groups
blocks per group, fragments per group
inodes per group
Superblock backups stored on blocks:
, , , , Writing inode tables: done
Creating journal ( blocks): done
Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every mounts or
days, whichever comes first. Use tune2fs -c or -i to override.

<3>使用parted查看磁盘的文件系统

parted命令是一个对分区及其文件系统进行建立、修改、调整、检查、复制等操作的工具,它比fdisk更加灵活,功能也更丰富。 具体使用方法这里不做介绍。

[root@edu ~]# parted /dev/sdc print

Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos Number Start End Size Type File system Flags
.3kB 2007MB 2007MB primary ext2
2007MB 8587MB 6580MB extended
2007MB 4014MB 2007MB logical ext3
4014MB 8587MB 4573MB logical Information: Don't forget to update /etc/fstab, if necessary.

df -lhT 命令也可以查看磁盘安装的文件系统,但是看到的是已挂载的磁盘,未挂载的磁盘看不到

[root@edu ~]# df -lhT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext3 18G .9G .8G % /
tmpfs tmpfs 506M 506M % /dev/shm
/dev/sdb1 ext3 20G .6G 15G % /renqinglei

<4>使用dumpe2fs命令查看分区的文件系统信息

dumpe2fs /dev/sdc1

[root@edu ~]# dumpe2fs /dev/sdc1
dumpe2fs 1.39 (-May-)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: c07ee372-2a2c-487f-846e-4241f511ed71
Filesystem magic number: 0xEF53
Filesystem revision #: (dynamic)
Filesystem features: resize_inode dir_index filetype sparse_super large_file
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count:
Block count:
Reserved block count:
Free blocks:
Free inodes:
First block:
Block size:
Fragment size:
Reserved GDT blocks:
Blocks per group:
Fragments per group:
Inodes per group:
Inode blocks per group:
Filesystem created: Sun Jan ::
Last mount time: n/a
Last write time: Sun Jan ::
Mount count:
Maximum mount count:
Last checked: Sun Jan ::
Check interval: ( months)
Next check after: Fri Jul ::
Reserved blocks uid: (user root)
Reserved blocks gid: (group root)
First inode:
Inode size:
Default directory hash: tea
Directory Hash Seed: 63067fa4-f68c-49fe--a9e96091a6d5 Group : (Blocks -)
Primary superblock at , Group descriptors at -
Reserved GDT blocks at -
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Backup superblock at , Group descriptors at -
Reserved GDT blocks at -
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Backup superblock at , Group descriptors at -
Reserved GDT blocks at -
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Backup superblock at , Group descriptors at -
Reserved GDT blocks at -
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Backup superblock at , Group descriptors at -
Reserved GDT blocks at -
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Backup superblock at , Group descriptors at -
Reserved GDT blocks at -
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -
Group : (Blocks -)
Block bitmap at (+), Inode bitmap at (+)
Inode table at - (+)
free blocks, free inodes, directories
Free blocks: -
Free inodes: -

<5>使用tune2fs命令查看分区的文件系统信息

tune2fs -l /dev/sdc1

tune2fs 命令参考 http://blog.chinaunix.net/uid-7530389-id-2050094.html

[root@edu ~]# tune2fs -l /dev/sdc1
tune2fs 1.39 (-May-)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: c07ee372-2a2c-487f-846e-4241f511ed71
Filesystem magic number: 0xEF53
Filesystem revision #: (dynamic)
Filesystem features: resize_inode dir_index filetype sparse_super large_file
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count:
Block count:
Reserved block count:
Free blocks:
Free inodes:
First block:
Block size:
Fragment size:
Reserved GDT blocks:
Blocks per group:
Fragments per group:
Inodes per group:
Inode blocks per group:
Filesystem created: Sun Jan ::
Last mount time: n/a
Last write time: Sun Jan ::
Mount count:
Maximum mount count:
Last checked: Sun Jan ::
Check interval: ( months)
Next check after: Fri Jul ::
Reserved blocks uid: (user root)
Reserved blocks gid: (group root)
First inode:
Inode size:
Default directory hash: tea
Directory Hash Seed: 63067fa4-f68c-49fe--a9e96091a6d5

<6>使用e2label命令为文件系统增加标签

e2label /dev/sdc1 显示sdc1的系统标签 e2label /dev/sdc1 LIVAN@NET.COM  为sdc1增加系统标签LIVAN@NET.COM  (习惯为大写,小些也可以,标签一般表示了该分区的用途)

[root@edu ~]# e2label  /dev/sdc1

[root@edu ~]# e2label /dev/sdc1 livan@net.com
[root@edu ~]# e2label /dev/sdc1
livan@net.com

当系统挂载后可在/etc/fstab文件下看到分区标签内容

添加标签也可以 mkfs.ext3 -L /iloveyao /dev/sda6  (创建文件系统的时候增加标签)

<7>使用fsck命令来检查并修复损坏的文件系统

fsck /dev/sdc1

参数 : filesys : device 名称(eg./dev/sda1),mount 点 (eg. / 或 /usr)

-t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数

-s : 依序一个一个地执行 fsck 的指令来检查

-A : 对/etc/fstab 中所有列出来的 partition 做检查

-C : 显示完整的检查进度

-d : 列印 e2fsck 的 debug 结果

-p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行

-R : 同时有 -A 条件时,省略 / 不检查

-V : 详细显示模式

-a : 如果检查有错则自动修复

-r : 如果检查有错则由使用者回答是否修复

注意:使用-y参数不提示而直接进行修复,默认fsck会自动判断文件系统类型,如果文件系统损坏较为严重,请使用 -t 参数指定文件系统类型, 对于识别为文件的损坏数据(文件系统无记录),fsck会将该文件放入lost+found目录.

文件系统很复杂,因此易于发生错误。可以用fsck命令检查文件系统是否正确和有效。它可以根据指令修复找到的小错误,并将未修复错误报告用户。 幸运的是,文件系统的代码非常有效,所以根本极少出现问题,并且问题通常原因是电源失败、硬件失败、或操作错误,例如没有正常关闭系统。

大多数系统设置为启动时自动运行fsck ,因此任何错误将在系统使用前被检测到(并根据希望修正)。

[root@edu ~]# fsck /dev/sdc1
fsck 1.39 (-May-)
e2fsck 1.39 (-May-)
livan@net.com: clean, / files, / blocks
[root@edu ~]#
[root@edu ~]# fsck /dev/sdc5
fsck 1.39 (-May-)
e2fsck 1.39 (-May-)
/dev/sdc5: clean, / files, / blocks --clean表示没有坏块

-------------------------------------

LINUX的日志模式(journal日志)

目前主流的文件系统都是带日志的文件系统,如ext3/ext4  。带日志的文件系统拥有较强的稳定性,在出现错误时可以进行修复, 这是因为使用带日志的文件系统会使用一个叫做"两阶段提交"的方式进行磁盘操作,当进行磁盘操作时,文件系统进行以下操作: <1>文件系统将准备执行的事务的具体内容写入日志

<2>文件系统进行操作

<3>操作成功后,将事务的具体内容从日志中删除

这样做的好处是,当事务执行的时候如果出现意外(如断电或磁盘故障),可以通过查询日志进行恢复操作。缺点是这样的文件系统会 丧失一定的性能(额外的日志读写操作),相对于安全性来说及目前计算机的性能来说,这点损失可以忽略不记。

5.挂载、使用文件系统

为磁盘分区安装完文件系统后,要想用户最终使用存取数据,还需要把安装好文件系统的分区挂载到一个目录才可以,这就像 windows系统上的C盘/D盘,只不过是windows系统是自动挂载的。

linux系统需要手工进行挂载操作或配置系统进行自动挂载。

<1>使用mount命令挂载系统

mount /dev/sdc1(要挂载的分区)   /mnt(挂载点) mount

--直接mount命令不带任何参数显示所有已挂载的文件系统

格式:mount [-参数] [设备名称] [挂载点]

常用参数:

-t  指定文件系统类型

-o  指定挂载选项  (选项可写到/etc/fstab中--自动挂载)

ro,rw  以只读或读写方式挂载,默认是rw

sync   代表不使用缓存,而是对所有操作直接写入磁盘 (数据安全,效率慢)

async  代表使用缓存,默认是async  (效率高,数据不太安全,突然断电等情况数据可能丢失)

noatime 代表每次访问文件时不更新文件的访问时间

atime   代表每次访问文件时更新文件的访问时间

remount 重心挂载文件系统

--查看所有已挂载的文件系统

[root@edu ~]# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=,mode=)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sdb1 on /renqinglei type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

--正常加载 默认是可以读写的

[root@edu ~]# mkdir /livan
[root@edu ~]# mount /dev/sdc1 /livan
[root@edu ~]# cd /livan/
[root@edu livan]# ls
lost+found
[root@edu livan]# touch test
[root@edu livan]# ll
total
drwx------ root root Jan : lost+found
-rw-r--r-- root root Jan : test
[root@edu livan]# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=,mode=)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sdb1 on /renqinglei type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdc1 on /livan type ext2 (rw) --括号里标的rw代表读写

--以只读方式加载

[root@edu livan]# cd ..
[root@edu /]# mount -o remount,ro /dev/sdc1 /livan
[root@edu /]# cd livan
[root@edu livan]# ls
lost+found test
[root@edu livan]# touch test2
touch: cannot touch `test2': Read-only file system --可以看到现在读写失败
[root@edu livan]# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=,mode=)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sdb1 on /renqinglei type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdc1 on /livan type ext2 (ro)

linux mount (挂载命令)  可参考 http://tutu.spaces.eepw.com.cn/articles/article/item/70737

<2>使用umount命令卸载文件系统

命令umount用来卸载已挂载的文件系统,这就相当于windows系统的弹出

umount 文件系统或挂载点 umount /dev/sdc1  相当于 umount /livan

[root@edu /]# umount /dev/sdc1

[root@edu /]# umount /livan    --可以前面已经卸载,再卸载/livan的时候就提示not mount了

umount: /livan: not mounted

在umount的时候有时候会出现 device is busy错误,则表示该文件系统正在被使用,无法卸载, 我们可以使用fuser命令查看使用文件系统的进程: 可以使用lsof查看正在被使用的文件:

fuser -m /livan

lsof  /livan   (列出打开的文件)

[root@edu ~]# umount /livan
umount: /livan: device is busy
umount: /livan: device is busy
[root@edu ~]#
[root@edu ~]# fuser -m /livan
/livan: 5425c
[root@edu ~]# lsof /livan
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash root cwd DIR , /livan

<3>自动挂载文件系统

linux中实现文件系统自动挂载是利用了系统配置文件/etc/fstab,在/etc/fstab中配置好我们的挂载项,那么当系统启动的时候 linux会把/etc/fstab 中的配置自动挂载到系统中, /etc/fstab中每一行代表一个挂载项,格式如下:

Linux磁盘及文件系统管理

[root@edu ~]# cat /etc/fstab
LABEL=/ / ext3 defaults
tmpfs /dev/shm tmpfs defaults
devpts /dev/pts devpts gid=,mode=
sysfs /sys sysfs defaults
proc /proc proc defaults
LABEL=SWAP-sda2 swap swap defaults
/dev/sdb1 /renqinglei ext3 defaults
/dev/sdc1 /livan ext3 noatime,rw

备注:要挂载的设备也可以使用LABEL进行识别,使用LABEL=LIVAN@NET.COM 取代/dev/sdc1
      配置完/etc/fstab后,可以使用mount -a命令会挂载所有fstab中定义的自动挂载项

[root@edu ~]# umount /livan
[root@edu ~]# cat /etc/fstab
LABEL=/ / ext3 defaults
tmpfs /dev/shm tmpfs defaults
devpts /dev/pts devpts gid=,mode=
sysfs /sys sysfs defaults
proc /proc proc defaults
LABEL=SWAP-sda2 swap swap defaults
/dev/sdb1 /renqinglei ext3 defaults
LABEL=livan@net.com /livan ext2 noatime,rw --使用了标签
[root@edu ~]# mount -a
[root@edu ~]# cd /livan
[root@edu livan]# ls
lost+found test
[root@edu livan]#