linux的哲学思想之一:一切皆文件。我们首先了解下与磁盘设备有关的设备文件等基本概念。
设备文件:对于每一个磁盘设备而言,都会有一个设备文件与其设备驱动程序相关联,进而能够与该磁盘设备进行通信。
设备号码:
硬盘接口类型:
分为并行接口和串行接口;
并行 | 最大传输速度 |
---|---|
IDE | 133MB/s |
SCSI | 640MB/s |
串行 | 最大传输速度 |
---|---|
SATA | 6Gbps(相当于0.75GB/s) |
SAS | 6Gbps(相当于0.75GB/s) |
USB | 480MB/s |
rpm:rotations per minute 转数每分钟;
track:磁道;
cylinder:柱面;
sector:扇区;
设备文件一般存储在/dev目录下,设备文件命名规则如下:
硬件设备 | 设备文件名 |
---|---|
IDE设备 | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd[a-p] |
软驱 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/devht0(IDE设备) |
由于IDE设备现在很少见,所以硬盘设备一般设备文件名为 /dev/sd[a-p] ;a-p表示16块不同的硬盘设备(默认从a开始分配);
分区示例
MBR
硬盘设备由扇区组成,其中0盘面0磁道0扇区的512个字节存放的是MBR,即Master Boot Record 或 Main Boot Record;MBR共分为三段:
(1)446bytes:Boot loader,启动加载器;
(2)64bytes:Partitions table,保存分区表,每16bytes标识一个分区,最多标识四个主分区,但是在通常情况下,标识三个主分区和一个扩展分区;
(3)2bytes:Magic Number,MBR的有效性标识;一般存有4个16进制数,值为55AA时表示有效,否则为无效;
接着,我们来了解linux中的文件系统。
类型 | 常见文件系统 |
---|---|
linux中常见的文件系统 | ext2,ext3,ext4,xfs,brfs,reiserfs,jfs,swap(交换分区,用来划分磁盘空间当做) |
光盘文件系统 | ISO9660 |
Windows | fat32,nifs |
Unix | FFS,UFS,JFS2 |
网络文件系统 | NFS,CIFS |
集群文件系统 | GFS2,OCFS2 |
分布式文件系统 | ceph,moosefs,mogilefs,GlusterFS,lUSTRE |
根据有无日志(journal)功能,还可分为:
是否支持日志 | 文件系统 |
---|---|
日志型文件系统 | ext3,ext4,xfs,…… |
非日志型文件系统 | ext2,vfat |
日志区
当编辑文件时,系统把文件的元数据从元数据区复制到日志区中去;若文件编辑时突然死机或关机,那么,再次开机时系统会首先查看日志区有没有未保存的文件,从而快速的对为正常保存的文件进行处理;
而若无日志区,操作系统需要进行全局检查;所以,日志区的存在大大提高了电脑异常关机时处理为保存文件的效率。
虚拟文件系统VFS:
Linux中有很多种类的文件系统,由VFS来将不同文件系统类型的接口统一成同一种接口。
文件系统的组成部分
文件系统包括两部分:内核中的模块和用户空间的管理工具;
内核中有与不同文件系统类型对应的模块,当用户申请时,用以提供给用户;而用户空间中的管理工具则用来作为用户管理文件系统的工具。
首先,我们先掌握如何对一块硬盘设备进行分区:
fdisk 分区管理工具;对于一块硬盘来说,对多只能管理15个分区;
用法
~]# fdisk -l
列出所有设备的磁盘分区信息;
~]# fdisk -l /dev/Device
列出指定设备的磁盘分区信息;
~]# fdisk /dev/Device
对磁盘设备进行管理,其中要用到很多子命令来实现管理功能;
子命令如下:
分区之后,我们要做的事情就是,查看内核是否已经识别到新的分区,方法如下:
~]# cat /proc/partitions
若文件/proc/partitions中有新分区的信息,那么就说明内核已经识别到了新的分区,否则,需要通知内核重新读取硬盘分区表。方法如下:
~]# partx -a /dev/Device
读取指定分区或读磁盘新增的分区;
~]# partx -n M:N /dev/Device
读取磁盘上从分区M到分区N;
示例演示:
然后,我们重启系统即可读取到新硬盘了。
由于我们之前只有一块SCSI硬盘,其设备名为/dev/sda,所以,我们新添加的硬盘,其设备名应为/dev/sdb。我们对/dev/sdb进行分区。
[root@localhost jeffrey]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x905e52a2.
//查看分区信息
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x905e52a2
Device Boot Start End Blocks Id System
//创建新的分区
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
//选择p,创建主分区
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set
//查看分区表信息
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x905e52a2
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
//w:将分区信息保存到磁盘上并退出
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
//将分区/dev/sdb1格式化为xfs格式
[root@localhost jeffrey]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost jeffrey]# mkdir /newfs
[root@localhost jeffrey]# mount /dev/sdb1 /newfs
[root@localhost jeffrey]# vim /etc/fstab
[root@localhost jeffrey]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Aug 26 19:02:55 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=8c591fb4-4d46-4a67-9ab8-729cf0cec90e / xfs defaults 0 0
UUID=cc6ed223-ea32-459d-b639-f77e8da35b72 /boot xfs defaults 0 0
UUID=a1467dac-9b82-4460-8460-49aaddac6b19 swap swap defaults 0 0
/dev/sdb1 /newfs xfs defaults 0 0
//查看挂在信息和磁盘使用情况
[root@localhost jeffrey]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 5.0G 13G 28% /
devtmpfs 472M 0 472M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 8.5M 479M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 297M 190M 108M 64% /boot
tmpfs 98M 32K 98M 1% /run/user/1000
/dev/sdb1 2.0G 33M 2.0G 2% /newfs
下面我们来学习在一个分区上进行文件系统的创建与管理。
mkfs 创建文件系统,适用于所有的linux支持的文件系统;
用法1
~]# mkfs.FS_TYPE [option] /dev/Device
用法2
~]# mkfs -t FS_TYPE [option] /dev/Device
选项
mke2fs :ext系列文件系统管理工具,适用于ext2,ext3,ext4;
用法
~]# mke2fs [option] /dev/Device
选项
由上述我们可以总结出在某个分区上创建ext3文件系统的四种方法:
法一:
~]# mkfs.ext3 /dev/Device
法二:
~]# mkfs -t ext3 /dev/Device
法三:
~]# mke2fs -t ext3 /dev/Device
法四:
~]# mke2fs -j /dev/Device
示例:
将分区/dev/sdb1的块大小设为1024b,为管理人员预留3%的空间,设卷标为MYDATA,指定为每2048个字节创建一个inode;-
[root@localhost ~]# mke2fs -b 1024 -m 3 -L MYDATA -i 2048 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=MYDATA
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
1048576 inodes, 2097152 blocks
62914 blocks (3.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=69206016
256 block groups
8192 blocks per group, 8192 fragments per group
4096 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553,
1024001, 1990657
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
blkid: 块设备属性信息查看;其属性信息包括:卷标、UUID、文件系统类型;
用法
~]# blkid
直接使用查看所有块设备的属性信息;
~]# blkid [option] [/dev/Device]
查看指定块设备的属性信息;
选项
示例1:
[root@localhost ~]# blkid
/dev/sda1: UUID="cc6ed223-ea32-459d-b639-f77e8da35b72" TYPE="xfs"
/dev/sda2: UUID="a1467dac-9b82-4460-8460-49aaddac6b19" TYPE="swap"
/dev/sda3: UUID="8c591fb4-4d46-4a67-9ab8-729cf0cec90e" TYPE="xfs"
/dev/sdb1: LABEL="MYDATA" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" TYPE="ext2"
示例2:
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="MYDATA" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" TYPE="ext2"
示例3:
[root@localhost ~]# blkid -L MYDATA
/dev/sdb1
[root@localhost ~]# blkid -U 8c591fb4-4d46-4a67-9ab8-729cf0cec90e
/dev/sda3
e2label 管理ext系列文件系统的卷标信息;
用法
~]# e2label /dev/Device
查看指定设备的卷标;
~]# e2label /dev/Device LABEL
修改指定设备的卷标
示例:
[root@localhost ~]# e2label /dev/sdb1
MYDATA
[root@localhost ~]# e2label /dev/sdb1 JEFFREY
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="JEFFREY" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" TYPE="ext2"
tune2fs 重新设定ext系列文件系统可调整参数的值;
用法
~]# tune2fs [option] /dev/Device
选项
示例1:
设置分区/dev/sdb1的文件系统拥有日志功能(文件系统相当于升级到ext3)
[root@localhost ~]# tune2fs -O has_journal /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: done
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="JEFFREY" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" SEC_TYPE="ext2" TYPE="ext3"
[root@localhost ~]# tune2fs -O ^has_journal /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="JEFFREY" UUID="3e447824-47c9-4665-942a-c56bbfab6a5d" TYPE="ext2"
示例2:
启用默认挂载选项acl;然后再次关闭acl默认挂载选项;
[root@localhost ~]# tune2fs -o acl /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
[root@localhost ~]# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: JEFFREY
Last mounted on:
Filesystem UUID: 3e447824-47c9-4665-942a-c56bbfab6a5d
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: user_xattr acl
……
……
[root@localhost ~]# tune2fs -o ^acl /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
[root@localhost ~]# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: JEFFREY
Last mounted on:
Filesystem UUID: 3e447824-47c9-4665-942a-c56bbfab6a5d
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: user_xattr
……
……
dumpe2fs 查看超级块信息;
用法
~]# dumpe2fs /dev/Device
直接使用可查看超级块信息,同时显示分区的块组详细信息;
~]# dumpe2fs -h /dev/Device
只查看超级块信息,同tune2fs -l /dev/Device
mkswap 创建交换分区;
用法
~]# mkswap [option] /dev/Device
选项
注意啦,在创建交换分区时,切记首先把分区ID修改为82(linux swap)。
fsck 文件系统检测,即 filesystem check;
用法
~]# fsck.FS_TYPE /dev/Device
~]# fsck -t FS_TYPE /dev/Device
注意:FS_TYPE必须要与检测分区文件系统类型相同;
选项:
e2fsck ext系列文件系统专用的检测修复工具;
用法
~]# e2fsck [option] /dev/Device
选项
示例:
[root@localhost ~]# e2fsck -f /dev/sdb1
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb1 is mounted.
e2fsck: Cannot continue, aborting.
我们的优盘若是ntfs文件系统,则linux内核可能无法识别,需使用工具mkfs.vfat
将其格式化为vfat(fat32)格式的文件系统;
创建了文件系统则需要进行挂载。有关文件系统的挂载、卸载等内容,会在第二篇文章中介绍。