在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等。
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的空间(有第三方解决方法)
如上图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
-------------------------
所谓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>在虚拟机中手动增加一块硬盘
<2>启动系统看到映射到的硬盘文件
[root@edu ~]# fdisk -l Disk /dev/sda: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders --列出/dev/sda有多少磁头多少扇区多少柱面,通过这里也能计算出磁盘大小 Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 2349 18868311 83 Linux /dev/sda2 2350 2610 2096482+ 82 Linux swap / Solaris Disk /dev/sdb: 21.4 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System --start/end表示起始柱面/结束柱面 Blocks表示了大小 Id代表为分区的类型 /dev/sdb1 1 2610 20964793+ 83 Linux Disk /dev/sdc: 8589 MB, 8589934592 bytes --这里看到/dev/sdc磁盘 8个G 就是我们刚才增加的磁盘,没有任何分区 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 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 1044. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Warning: invalid flag 0x0000 of partition table 4 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 (1-4) --代表创建主分区 p Partition number (1-4): 1 First cylinder (1-1044, default 1): 1 Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): +2G Command (m for help): p Disk /dev/sdc: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 1 244 1959898+ 83 Linux Command (m for help): n Command action e extended p primary partition (1-4) e --创建扩展分区 Partition number (1-4): 2 --主分区已经有1了,所以现在扩展分区号只能从2开始,我们把剩下的都给了扩展分区 First cylinder (245-1044, default 245): Using default value 245 Last cylinder or +size or +sizeM or +sizeK (245-1044, default 1044): Using default value 1044 Command (m for help): p Disk /dev/sdc: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 1 244 1959898+ 83 Linux /dev/sdc2 245 1044 6426000 5 Extended --发现已经创建了扩展分区/dev/sdc2,我们知道扩展分区是不能直接使用的,需要在扩展分区上划分逻辑分区才能使用 Command (m for help): n Command action l logical (5 or over) --创建逻辑分区的选项出现了,(有扩展分区,才会允许出现创建逻辑分区),我现在创建逻辑分区,不论主分区号排到几号,逻辑分区号都是从5往后排 p primary partition (1-4) l First cylinder (245-1044, default 245): Using default value 245 Last cylinder or +size or +sizeM or +sizeK (245-1044, default 1044): +2G Command (m for help): p Disk /dev/sdc: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 1 244 1959898+ 83 Linux /dev/sdc2 245 1044 6426000 5 Extended /dev/sdc5 245 488 1959898+ 83 Linux Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (489-1044, default 489): Using default value 489 Last cylinder or +size or +sizeM or +sizeK (489-1044, default 1044): Using default value 1044 Command (m for help): p Disk /dev/sdc: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 1 244 1959898+ 83 Linux /dev/sdc2 245 1044 6426000 5 Extended /dev/sdc5 245 488 1959898+ 83 Linux /dev/sdc6 489 1044 4466038+ 83 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----- 1 root disk 8, 32 Jan 24 19:19 /dev/sdc brw-r----- 1 root disk 8, 33 Jan 24 19:20 /dev/sdc1 brw-r----- 1 root disk 8, 34 Jan 24 19:20 /dev/sdc2 brw-r----- 1 root disk 8, 37 Jan 24 19:20 /dev/sdc5 brw-r----- 1 root disk 8, 38 Jan 24 19:20 /dev/sdc6
注意:当我们做完磁盘分区的时候,查看/dev/不一定能够看到分区结果,这是因为/dev/下的文件是内核来创建的,内核有时候在启动系统的时候更新一次就不再更新了,所以有时候我们需要使用partprobe命令让内核更新一下分区信息,使用partprobe命令后表示我们做的分区已经被写入磁盘了而且已经被当前的系统给探测到了
[root@edu ~]# partprobe [root@edu ~]# ll /dev/sdc* brw-r----- 1 root disk 8, 32 Jan 24 19:19 /dev/sdc brw-r----- 1 root disk 8, 33 Jan 24 19:28 /dev/sdc1 brw-r----- 1 root disk 8, 34 Jan 24 19:28 /dev/sdc2 brw-r----- 1 root disk 8, 37 Jan 24 19:28 /dev/sdc5 brw-r----- 1 root disk 8, 38 Jan 24 19:28 /dev/sdc6
其实我们还可以查看/proc/partitions查看磁盘分区信息,/proc/partitions文件反映了当前系统的实时分区信息
[root@edu ~]# cat /proc/partitions major minor #blocks name 8 0 20971520 sda 8 1 18868311 sda1 8 2 2096482 sda2 8 16 20971520 sdb 8 17 20964793 sdb1 8 32 8388608 sdc 8 33 1959898 sdc1 8 34 0 sdc2 8 37 1959898 sdc5 8 38 4466038 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.18-164.el5/kernel/fs [root@edu fs]# ll total 232 drwxr-xr-x 2 root root 4096 May 13 2014 autofs4 drwxr-xr-x 2 root root 4096 May 13 2014 cachefiles drwxr-xr-x 2 root root 4096 May 13 2014 cifs drwxr-xr-x 2 root root 4096 May 13 2014 configfs drwxr-xr-x 2 root root 4096 May 13 2014 cramfs drwxr-xr-x 2 root root 4096 May 13 2014 dlm drwxr-xr-x 2 root root 4096 May 13 2014 ecryptfs drwxr-xr-x 2 root root 4096 May 13 2014 exportfs drwxr-xr-x 2 root root 4096 May 13 2014 ext3 drwxr-xr-x 2 root root 4096 May 13 2014 ext4 drwxr-xr-x 2 root root 4096 May 13 2014 fat drwxr-xr-x 2 root root 4096 May 13 2014 freevxfs drwxr-xr-x 2 root root 4096 May 13 2014 fscache drwxr-xr-x 2 root root 4096 May 13 2014 fuse drwxr-xr-x 3 root root 4096 May 13 2014 gfs2 drwxr-xr-x 2 root root 4096 May 13 2014 hfs drwxr-xr-x 2 root root 4096 May 13 2014 hfsplus drwxr-xr-x 2 root root 4096 May 13 2014 jbd drwxr-xr-x 2 root root 4096 May 13 2014 jbd2 drwxr-xr-x 2 root root 4096 May 13 2014 jffs2 drwxr-xr-x 2 root root 4096 May 13 2014 lockd drwxr-xr-x 2 root root 4096 May 13 2014 msdos drwxr-xr-x 2 root root 4096 May 13 2014 nfs drwxr-xr-x 2 root root 4096 May 13 2014 nfs_common drwxr-xr-x 2 root root 4096 May 13 2014 nfsd drwxr-xr-x 2 root root 4096 May 13 2014 nls drwxr-xr-x 2 root root 4096 May 13 2014 squashfs drwxr-xr-x 2 root root 4096 May 13 2014 udf drwxr-xr-x 2 root root 4096 May 13 2014 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 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 245280 inodes, 489974 blocks 24498 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=503316480 15 block groups 32768 blocks per group, 32768 fragments per group 16352 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 29 mounts or 180 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 (29-May-2006) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 245280 inodes, 489974 blocks 24498 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=503316480 15 block groups 32768 blocks per group, 32768 fragments per group 16352 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 28 mounts or 180 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 1 32.3kB 2007MB 2007MB primary ext2 2 2007MB 8587MB 6580MB extended 5 2007MB 4014MB 2007MB logical ext3 6 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 8.9G 7.8G 54% / tmpfs tmpfs 506M 0 506M 0% /dev/shm /dev/sdb1 ext3 20G 4.6G 15G 25% /renqinglei
<4>使用dumpe2fs命令查看分区的文件系统信息
dumpe2fs /dev/sdc1
[root@edu ~]# dumpe2fs /dev/sdc1 dumpe2fs 1.39 (29-May-2006) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: c07ee372-2a2c-487f-846e-4241f511ed71 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (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: 245280 Block count: 489974 Reserved block count: 24498 Free blocks: 481547 Free inodes: 245269 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 119 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 16352 Inode blocks per group: 511 Filesystem created: Sun Jan 25 10:53:06 2015 Last mount time: n/a Last write time: Sun Jan 25 10:53:06 2015 Mount count: 0 Maximum mount count: 29 Last checked: Sun Jan 25 10:53:06 2015 Check interval: 15552000 (6 months) Next check after: Fri Jul 24 10:53:06 2015 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 Default directory hash: tea Directory Hash Seed: 63067fa4-f68c-49fe-8008-a9e96091a6d5 Group 0: (Blocks 0-32767) Primary superblock at 0, Group descriptors at 1-1 Reserved GDT blocks at 2-120 Block bitmap at 121 (+121), Inode bitmap at 122 (+122) Inode table at 123-633 (+123) 32128 free blocks, 16341 free inodes, 2 directories Free blocks: 640-32767 Free inodes: 12-16352 Group 1: (Blocks 32768-65535) Backup superblock at 32768, Group descriptors at 32769-32769 Reserved GDT blocks at 32770-32888 Block bitmap at 32889 (+121), Inode bitmap at 32890 (+122) Inode table at 32891-33401 (+123) 32134 free blocks, 16352 free inodes, 0 directories Free blocks: 33402-65535 Free inodes: 16353-32704 Group 2: (Blocks 65536-98303) Block bitmap at 65536 (+0), Inode bitmap at 65537 (+1) Inode table at 65538-66048 (+2) 32255 free blocks, 16352 free inodes, 0 directories Free blocks: 66049-98303 Free inodes: 32705-49056 Group 3: (Blocks 98304-131071) Backup superblock at 98304, Group descriptors at 98305-98305 Reserved GDT blocks at 98306-98424 Block bitmap at 98425 (+121), Inode bitmap at 98426 (+122) Inode table at 98427-98937 (+123) 32134 free blocks, 16352 free inodes, 0 directories Free blocks: 98938-131071 Free inodes: 49057-65408 Group 4: (Blocks 131072-163839) Block bitmap at 131072 (+0), Inode bitmap at 131073 (+1) Inode table at 131074-131584 (+2) 32255 free blocks, 16352 free inodes, 0 directories Free blocks: 131585-163839 Free inodes: 65409-81760 Group 5: (Blocks 163840-196607) Backup superblock at 163840, Group descriptors at 163841-163841 Reserved GDT blocks at 163842-163960 Block bitmap at 163961 (+121), Inode bitmap at 163962 (+122) Inode table at 163963-164473 (+123) 32134 free blocks, 16352 free inodes, 0 directories Free blocks: 164474-196607 Free inodes: 81761-98112 Group 6: (Blocks 196608-229375) Block bitmap at 196608 (+0), Inode bitmap at 196609 (+1) Inode table at 196610-197120 (+2) 32255 free blocks, 16352 free inodes, 0 directories Free blocks: 197121-229375 Free inodes: 98113-114464 Group 7: (Blocks 229376-262143) Backup superblock at 229376, Group descriptors at 229377-229377 Reserved GDT blocks at 229378-229496 Block bitmap at 229497 (+121), Inode bitmap at 229498 (+122) Inode table at 229499-230009 (+123) 32134 free blocks, 16352 free inodes, 0 directories Free blocks: 230010-262143 Free inodes: 114465-130816 Group 8: (Blocks 262144-294911) Block bitmap at 262144 (+0), Inode bitmap at 262145 (+1) Inode table at 262146-262656 (+2) 32255 free blocks, 16352 free inodes, 0 directories Free blocks: 262657-294911 Free inodes: 130817-147168 Group 9: (Blocks 294912-327679) Backup superblock at 294912, Group descriptors at 294913-294913 Reserved GDT blocks at 294914-295032 Block bitmap at 295033 (+121), Inode bitmap at 295034 (+122) Inode table at 295035-295545 (+123) 32134 free blocks, 16352 free inodes, 0 directories Free blocks: 295546-327679 Free inodes: 147169-163520 Group 10: (Blocks 327680-360447) Block bitmap at 327680 (+0), Inode bitmap at 327681 (+1) Inode table at 327682-328192 (+2) 32255 free blocks, 16352 free inodes, 0 directories Free blocks: 328193-360447 Free inodes: 163521-179872 Group 11: (Blocks 360448-393215) Block bitmap at 360448 (+0), Inode bitmap at 360449 (+1) Inode table at 360450-360960 (+2) 32255 free blocks, 16352 free inodes, 0 directories Free blocks: 360961-393215 Free inodes: 179873-196224 Group 12: (Blocks 393216-425983) Block bitmap at 393216 (+0), Inode bitmap at 393217 (+1) Inode table at 393218-393728 (+2) 32255 free blocks, 16352 free inodes, 0 directories Free blocks: 393729-425983 Free inodes: 196225-212576 Group 13: (Blocks 425984-458751) Block bitmap at 425984 (+0), Inode bitmap at 425985 (+1) Inode table at 425986-426496 (+2) 32255 free blocks, 16352 free inodes, 0 directories Free blocks: 426497-458751 Free inodes: 212577-228928 Group 14: (Blocks 458752-489973) Block bitmap at 458752 (+0), Inode bitmap at 458753 (+1) Inode table at 458754-459264 (+2) 30709 free blocks, 16352 free inodes, 0 directories Free blocks: 459265-489973 Free inodes: 228929-245280
<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 (29-May-2006) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: c07ee372-2a2c-487f-846e-4241f511ed71 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (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: 245280 Block count: 489974 Reserved block count: 24498 Free blocks: 481547 Free inodes: 245269 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 119 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 16352 Inode blocks per group: 511 Filesystem created: Sun Jan 25 10:53:06 2015 Last mount time: n/a Last write time: Sun Jan 25 10:53:06 2015 Mount count: 0 Maximum mount count: 29 Last checked: Sun Jan 25 10:53:06 2015 Check interval: 15552000 (6 months) Next check after: Fri Jul 24 10:53:06 2015 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 Default directory hash: tea Directory Hash Seed: 63067fa4-f68c-49fe-8008-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 (29-May-2006) e2fsck 1.39 (29-May-2006) livan@net.com: clean, 11/245280 files, 8427/489974 blocks [root@edu ~]# [root@edu ~]# fsck /dev/sdc5 fsck 1.39 (29-May-2006) e2fsck 1.39 (29-May-2006) /dev/sdc5: clean, 11/245280 files, 16629/489974 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=5,mode=620) 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 16 drwx------ 2 root root 16384 Jan 25 10:53 lost+found -rw-r--r-- 1 root root 0 Jan 25 13:45 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=5,mode=620) 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=5,mode=620) 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 5425 root cwd DIR 8,33 4096 2 /livan
<3>自动挂载文件系统
linux中实现文件系统自动挂载是利用了系统配置文件/etc/fstab,在/etc/fstab中配置好我们的挂载项,那么当系统启动的时候 linux会把/etc/fstab 中的配置自动挂载到系统中, /etc/fstab中每一行代表一个挂载项,格式如下:
[root@edu ~]# cat /etc/fstab LABEL=/ / ext3 defaults 1 1 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-sda2 swap swap defaults 0 0 /dev/sdb1 /renqinglei ext3 defaults 0 0 /dev/sdc1 /livan ext3 noatime,rw 0 0
备注:要挂载的设备也可以使用LABEL进行识别,使用LABEL=LIVAN@NET.COM 取代/dev/sdc1
配置完/etc/fstab后,可以使用mount -a命令会挂载所有fstab中定义的自动挂载项
[root@edu ~]# umount /livan [root@edu ~]# cat /etc/fstab LABEL=/ / ext3 defaults 1 1 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-sda2 swap swap defaults 0 0 /dev/sdb1 /renqinglei ext3 defaults 0 0 LABEL=livan@net.com /livan ext2 noatime,rw 0 0 --使用了标签 [root@edu ~]# mount -a [root@edu ~]# cd /livan [root@edu livan]# ls lost+found test [root@edu livan]#
完