在网络系统中,磁盘和文件系统管理是两个非常基本、同时也是非常重要的管理任务,特别是文件系统管理,因为它与用户权限和整个网络系统的安全息息相关。本次博文的主题是关于Linux系统中磁盘分区、格式化及挂载,下次博文我们再详细讨论文件系统管理。
在操作系统中,磁盘管理属于设备管理的范畴。一块硬盘安装到主机之后称为裸设备,若要能够在Linux系统中使用必须对其进行如下步骤:分区=>格式化(创建文件系统)=>挂载我们先来谈谈Linux系统中的设备类型。
一、Linux系统中的设备类型:
Linux沿袭Unix的风格,将所有设备认成是一个文件。
设备文件分为两种:
1、块设备文件(b):
通常称为“随机设备”。所谓“块设备”是指对其信息的存取以“块”为单位,如通常的光盘、硬盘、软盘、磁带等,块长取512、1024或4096字节。块设备可以直接通过块设备特别文件来访问。为了提高数据的传输效率,块设备驱动程序内部采用块缓冲技术。
2、字符设备文件(c):
通常称为“线性设备”。所谓“字符设备”是指在I/O传输中以字符为单位进行传输的设备,如键盘,打印机等。不过需要注意的是以字符为单位并不一定意味着是以字节为单位,因为有的编码规则规定,一个字符占16bit,合2个字节。
设备文件一般存放在/dev目录下:
/dev/hd[a-t]:IDE设备
/dev/sd[a-z]:SCSI设备
/dev/fd[0-7]:标准软驱
/dev/md[0-31]:软raid设备
/dev/loop[0-7]:本地回环设备
/dev/ram[0-15]:内存
/dev/null:无限数据接收设备 ,相当于回收站
/dev/zero:无限零资源,有点像冒泡机
/dev/tty[0-63]:虚拟终端
/dev/ttyS[0-3]:串口
/dev/lp[0-3]:并口
/dev/console:控制台
/dev/fb[0-31]:framebuffer
/dev/cdrom -> /dev/hdc
/dev/modem -> /dev/ttyS[0-9]
/dev/pilot -> /dev/ttyS[0-9]
/dev/console:控制台
Tips:控制台和虚拟终端的区别与联系:
控制台就好比电视机上的按钮,终端好比遥控板,他们的目的都是控制电视机,但是控制台必须在本地,而终端可以在远端,系统只有一个控制台,叫console,其他的都是终端
二、Linux系统中的磁盘及分区:
1、磁盘基础:
日常生活和工作中,常见的磁盘种类有以下几种:
(1)IDE(ATA)硬盘:
集成磁盘电子接口,Integrated Device Electronics,并行传输数据, 最大的理论传输速率为133MB/s
SATA:全称是Serial Advanced Technology Attachment(串行高级技术附件,一种基于行业标准的串行硬件驱动器接口)就是我们现在经常所说的SATA; 常见的理论传输速率:300MB/s, 600MB/s, 6Gb/s
(2)SCSI硬盘:
Small Computer System Interface, UltraSCSI 标准传输速率为320MB/s 常见转速:10000 RPM, 15000RPM
SAS:串行版的SCSI硬盘,最大传输速率:6Gbps
(3)SSD硬盘:
Disk固态硬盘(Solid State Disk)用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘的接口规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也完全与普通硬盘一致。
(4)USB硬盘:
常见USB接口规范:1.1, 2.0, 3.0
2、Linux系统中的磁盘分区
(1)磁盘分区基础:
- 首先问大家一个问题:磁盘为什么需要分区?
如果没有分区,我们要在一个磁盘上安装两个以上的操作系统是无法办到的。因此,每一个分区可以当做独立的文件系统来使用以便于安装多个操作系统,这就是磁盘需要分区的原因。
- Linux中不同类型的硬盘和分区文件名不同:
IDE硬盘和分区文件名:
Linux对连接到IDE接口的硬盘使用/dev/hdxy的方式命名,其中hd表示硬盘为IDE类型,x表示硬盘序号,x的值可以是a、b、c、d。 y为分区号;如第二块IDE硬盘的第二个分区系统中文件名为hdb2
SATA或者SCSI硬盘和分区文件名:
连接到SCSI接口的设备使用ID号进行区别,SCSI设备ID号为0~15,SCSI接口卡本身的ID号是7。Linux对连接到SCSI接口卡的硬盘使用/dev/sdx的方式命名,x的值可以是a、b、c、d等,即ID号为0的SCSI硬盘名为/dev/sda,ID号为1的SCSI硬盘名为/dev/sdb,以此类推。LINUX对SCSI硬盘最多支持15个分区。
说明:
a、所有使用USB接口的移动存储设备,不论是移动硬盘、优盘,还是USB光驱,都一律使用/dev/sdxx的设备文件。光驱(光盘)的设备文件一般默认为/dev/cdrom,这个就与光驱的接口无关了。
b、一个硬盘最多可以有4个(主+扩展)分区,其中,扩展分区只能有一个(如图中的/dev/hda2为扩展分区,/dev/hda5为扩展分区中划分的逻辑分区),分区的形式只能有两种:
P+P+P+P
P+P+P+E //P表示主分区,E表示扩展分区(扩展分区保存的是磁盘的二级分区表,它指向具体的逻辑分区,因此扩展分区不能写东西,这是我个人的理解哈)
因1~4号己被保留,所以第1个逻辑分区的代号由5号开始,以此顺序增加到磁盘号,若未划分/dev/sda3,/dev/sda4分区,则这两个代号是空的被保留下来的代号。 逻辑分区和主分区没有关系,只与MBR的空间有关系
- MBR(Main/Master Boot Record)知识点:
引导扇区在每个分区里都存在,但我们常说的主引导扇区是硬盘的第一物理扇区。它位于磁盘的0磁头0柱面1扇区且由两个部分组成:主引导记录MBR+硬盘分区表DPT,其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。
在总共512字节的主引导扇区里其中MBR占446个字节(偏移0-- 偏移1BDH),DPT占64个字节(偏移1BEH--偏移1FDH),最后两个字节“55,AA”(偏移1FEH偏移1FFH)是分区的结束标志,称为“魔数(MagicNumber)”,表示当前分区是否可引导(5A表示可引导)。也就是说主引导扇区=MBR+DPT+MagicNumber,大致的结构如下图:
0000 |------------------------------------------------|
| |
| |
| Main Boot Record |
| |
| |
| 主引导记录(446字节) |
| |
| |
| |
01BD | |
01BE |------------------------------------------------|
| |
01CD | 分区信息 1(16字节) |
01CE |------------------------------------------------|
| |
01DD | 分区信息 2(16字节) |
01DE |------------------------------------------------|
| |
01ED | 分区信息 3(16字节) |
01EE |------------------------------------------------|
| |
01FD | 分区信息 4(16字节) |
|------------------------------------------------|
| 01FE | 01FF |
| 55 | AA |
|------------------------------------------------|
(2)Linux下的磁盘分区:
命令名称:fdisk
命令所在路径:/sbin/fdisk
执行权限:root
功能描述:磁盘分区相关操作,最多支持15个分区
语法:fdisk [option] [DEVICE]
常用选项:
-l:查看当前磁盘分区的详细情况
范例:
[root@Centos ~]# fdisk -l #查看磁盘的分区情况,不带参数显示的是当前主机上所有的磁盘分区情况 Disk /dev/sda: 107.4 GB, 107374182400 bytes #当前主机只有一块磁盘,容量107.4GB 255 heads, 63 sectors/track, 13054 cylinders #此处显示该硬盘的具体参数:共255个磁头,每个磁道63个扇区,共13054个柱面 Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes #此处显示扇区大小,每个扇区512个字节 I/O size (minimum/optimal): 512 bytes / 512 bytes #I/O大小,说明读写一个数据最小需要512字节 Disk identifier: 0x00097863 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux #第一个分区,按柱面划分,从第一个柱面开始,到26个柱面结束 Partition 1 does not end on cylinder boundary. #此处的警告说明该分区没有包含整个柱面(一个柱面一定要属于一个分区,否则就会给出警告) /dev/sda2 26 91 524288 82 Linux swap / Solaris #第二个分区,分区类型为“交换分区” Partition 2 does not end on cylinder boundary. /dev/sda3 91 13055 104127488 83 Linux #第三个分区,分区类型为Linux分区fdisk是交互式命令,其下有许多子命令,说明如下:
[root@Centos ~]# fdisk /dev/sda #fdisk的参数是设备名称而非分区名 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): m #交互式命令,提示键入“m”以获取帮助 Command action #可以看到,fdisk有如下这么多的子命令 a toggle a bootable flag #设定可启动标记 b edit bsd disklabel c toggle the dos compatibility flag d delete a partition #删除一个分区 l list known partition types #各分区类型所对应的System ID 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 #修改指定分区的System ID u change display/entry units v verify the partition table w write table to disk and exit #保存退出 x extra functionality (experts only)我们重点来看下“l”子命令,用于列出Linux支持的分区所对应的System ID:
[root@Centos ~]# fdisk /dev/sda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): l 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx 5 Extended 42 SFS 86 NTFS volume set da Non-FS data 6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility 8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt 9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b 11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor 12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor 14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary 16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS 17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT 1e Hidden W95 FAT1其中常用的类型为:
82:Linux swap交换分区
83:Linux分区
8e:Linux逻辑卷
fd:Soft Raid
下面我们来进行常规的分区操作哈!
-
首先来查看下当前主机的分区情况:
-
既然没有多余的磁盘空间来创建分区,那我们先来删除其中一个分区:
-
创建扩展分区:
-
创建逻辑分区:(扩展分区创建好了之后不能拿来直接使用哈,要想使用还需要创建逻辑分区)
重要说明:
(1)分区创建好了之后,用fdisk -l命令可以查看分区情况,但需要注意的是:虽然fidsk命令列出了所有的分区情况,不代表新分区就可以被操作系统识别了,文件系统是内核的功能(即软件能识别新分区但内核并不能识别),可以用"cat /proc/partitions"命令查看,若要内核能识别需要把分区变化情况同步到内核。
(2)要特别注意:分区及格式化操作会永久地破坏目前存在于该分区上的任何数据,操作时需要特别小心(操作前对原有数据做备份)!
-
查看内核识别的分区信息:
- 让内核重新读取硬盘分区表:
RHEL5:partprobe [DEVICE]
说明:RHEL5上该命令的执行能够成功,但RHEL6上可能不行,需要重新启动系统
[root@Centos ~]# partprobe /dev/sda #提示需要重启系统所有分区才能被内核识别(其实windows系统也是这样的,分区完之后会提示用户重启系统以便内核读取) Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy). As a result, it may not reflect all of your changes until after reboot.?RHEL6:partx -a [PARTITION] DEVICE
[root@Centos ~]# partx -a /dev/sdb #不带分区选项表示读取指定硬盘的所有分区 BLKPG: Device or resource busy #显示设备繁忙无法添加分区哈 error adding partition 1我们手动添加来试试哈!
[root@Centos dev]# partx -a sdb1 /dev/sdb #手动添加成功了哈 [root@Centos dev]#
三、Linux系统中文件系统的创建(磁盘格式化):
Tips:只有内核能够识别硬盘分区信息之后,我们才能够对硬盘格式化,格式化的过程也就是创建文件系统的过程,文件系统通常由内核提供!
1、Linux系统所支持的文件系统类型:
以管理员身份登录,查看"/lib/modules/2.6.32-358.el6.x86_64/kernel/fs/ ”目录
[root@Centos ~]# ls /lib/modules/2.6.32-358.el6.x86_64/kernel/fs/ autofs4 cachefiles configfs dlm exportfs ext3 fat fuse jbd jffs2 mbcache.ko nfs_common nls ubifs xfs btrfs cifs cramfs ecryptfs ext2 ext4 fscache gfs2 jbd2 lockd nfs nfsd squashfs udf可以看到Linux支持这么多的文件系统哈,下面我们对常用的文件系统类型做一个简单介绍。
(1)minix
是Minix操作系统使用的文件系统,是Linux最先使用的文件系统。它有许多缺点:分区只能小于64MB,只支持短文件名,单一的时间戳,等等。在软盘和动态磁盘领域仍然有用。
(2)ext
是对Minix的扩展。已完全被ext2取代,内核最终将不会支持它。
(3)ext2
是Linux使用的,性能很好的文件系统,用于固定文件系统和可活动文件系统。它是作为ext文件系统的扩展而设计的。ext2在Linux所支持的文件系统中,提供最好的性能(在速度和CPU使用方面),简短的说,ext2是Linux的主要文件系统。
(4)ext3
是对ext2增加日志功能后的扩展。是RHEL5中默认使用的文件系统类型。它向前、向后兼容ext2,意为ext2不用丢失数据和格式化就可以转换为ext3,ext3也可以转换为ext2 而不用丢失数据(只要重新安装该分区就行了),强烈推荐使用这种文件系统。
(5)ext4
为第4代扩展文件系统,是RHEL6中默认使用的文件系统类型,属于典型的日志型文件系统。其特点是保持有磁盘存取记录的日志数据,便于恢复,性能和稳定性更加出色。
(6)ReiserFS/JFS
仍然在完善的带日志文件系统,特别适合小文件的文件系统
(7)ISO9660文件系统
该文件系统中光盘所使用的标准文件系统,Linux对该文件系统也有很好的支持,不仅能读取光盘和光盘ISO映像文件,而且还支持在Linux环境中刻录光盘。
(8)NFS文件系统
NFS即网络文件系统,用于在UNIX系统间通过网络进行文件共享,用户可将网络中NFS服务器提供的共享目录挂载到本地的文件目录中,从而实现操作和访问NFS文件系统中的内容。
(9)swap文件系统
swap文件系统用于Linux的交换分区。在Linux中,使用整个交换分区来提供虚拟内存,其分区大小一般应是系统物理内存的2倍,在安装Linux操作系统时,就应创建交换分区, 它是Linux正常运行所必需的,其类型必须是swap,交换分区由操作系统自行管理。
2、创建文件系统(格式化分区):
配置文件/etc/mke2fs.conf可以定义文件系统类型,下面进行简单说明:
[root@Centos ~]# cat /etc/mke2fs.conf [defaults] #默认选项 base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr #默认创建的文件系统是ext2; #若 base_features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize 则默认创建ext4文件系统 blocksize = 4096 #默认块大小,对于大文件块越小越好 inode_size = 256 inode_ratio = 16384 [fs_types] ext3 = { features = has_journal } ext4 = { features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize inode_size = 256 } ext4dev = { features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize inode_size = 256 options = test_fs=1 } small = { blocksize = 1024 inode_size = 128 inode_ratio = 4096 }举例说明:
[root@Centos dev]# mkfs -t ext3 /dev/sdb1 #用ext3文件系统格式化sdb1分区 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) #块大小为4096B Fragment size=4096 (log=2) Stride=0 blocks, Stripe style="color: #800080">0 blocks 131648 inodes, 526120 blocks 26306 blocks (5.00%) reserved for the super user #默认分区的5%的空间预留给管理使用的块 First data block=0 Maximum filesystem blocks=541065216 17 block groups 32768 blocks per group, 32768 fragments per group 7744 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 39 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@Centos dev]# mke2fs -b 2048 /dev/sdb1 #调整分区sdb1的块大小为2048B mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=2048 (log=1) #可以看到块大小变成了2048B了哈 Fragment size=2048 (log=1) Stride=0 blocks, Stripe style="color: #800080">0 blocks 131560 inodes, 1052240 blocks 52612 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=538968064 65 block groups 16384 blocks per group, 16384 fragments per group 2024 inodes per group Superblock backups stored on blocks: 16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.3、查看/调整文件系统参数:
举例说明:
[root@Centos dev]# tune2fs -l /dev/sdb1 #查看sdb1分区的超级块信息 tune2fs 1.41.12 (17-May-2010) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: 8f9d5e47-c3e2-441f-b29f-e0a9dd508632 #UUID Filesystem magic number: 0xEF53 #文件系统魔数 Filesystem revision #: 1 (dynamic) Filesystem features: ext_attr resize_inode dir_index filetype sparse_super Filesystem flags: signed_directory_hash Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 131560 Block count: 1052240 #总共块的数目 Reserved block count: 52612 Free blocks: 1031020 Free inodes: 131549 First block: 0 Block size: 2048 #块大小 Fragment size: 2048 Reserved GDT blocks: 512 Blocks per group: 16384 Fragments per group: 16384 Inodes per group: 2024 Inode blocks per group: 253 Filesystem created: Wed Feb 26 14:13:10 2014 #文件系统创建日期 Last mount time: n/a Last write time: Wed Feb 26 14:13:10 2014 Mount count: 0 Maximum mount count: 20 Last checked: Wed Feb 26 14:13:10 2014 Check interval: 15552000 (6 months) Next check after: Mon Aug 25 14:13:10 2014 Reserved blocks uid: 0 (user root) #预留空间所给的用户是管理员 Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Default directory hash: half_md4 Directory Hash Seed: 7b570d3a-1fe3-4d12-a9c3-3a5811e8cbe4设定卷标/查看卷标、UUID和文件系统类型:
[root@Centos ~]# e2label /dev/sdb1 MYDATA #设定sdb1的卷标为MYDATA [root@Centos ~]# blkid /dev/sdb1 #UUID、文件系统类型和卷标 /dev/sdb1: UUID="284c3316-e0f8-4a87-8d49-72ab1c9964ae" TYPE="ext4" LABEL="MYDATA"
文件系统创建完之后,我们还需要挂载分区才能够正常使用新创建好的分区。这部分内容我们在下一次博文中详细讨论哈!