块设备:block 存取单位“块” 磁盘
字符设备:char 存取单位“字符” 键盘
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
只有元数据,没有数据
设备号码
主设备 :major number 标识设备类型
次设备:minor number 标识同一类型下的不同设备
硬盘接口类型:数据交换能力
并口:
IDE :33MB/S (接口速率)
SCSI :640MB/S
串口:
SATA:6Gbps
SAS:6Gbps
USB : 480MB/s
磁盘设备的设备文件命名:
IDE: /dev/hd
SCSI,SATA,SAS,USB :/dev/sd
不同设备:a-z
/dev/sda ,/dev/sdb....
同一哦设备上的不同分区:1,2,3....
/dev/sda1 , /dev/sda5
1.磁盘的基础知识
1.1机械硬盘(HDD:Hard Disk Drive)
机械硬盘由多块盘片组成,它们都绕着主轴旋转。每块盘片上下方都有读写磁头悬浮在盘片上下方,它们与盘片的距离极小。在每次读写数据时盘片旋转,读写磁头被磁臂控制着不断的移动来读取其中的数据。
所有的盘片都是同时同步转动,所有的磁头也是同步移动。
磁盘在物理上划分了扇区、磁道和柱面。如果划分了分区,则分区是逻辑上柱面的分隔边界。
读写磁头在停止状态下,在盘片旋转时磁头扫过的一圈轨迹称为磁道,所有的磁道都是同心圆。从盘片外圈开始向内数,磁道号从0开始逐数增加。
每个磁道以512字节等分为多个弧段。所以外圈磁道的扇区数较多,内圈磁道的扇区数较少,有些硬盘参数上写的磁道扇区数通常用一个范围来标识,如373-768表示最外圈磁道有768个扇区,最内圈有373个扇区,这就可以计算出每个磁道的字节数。
每个扇区512字节,扇区是磁盘控制器的最小读写单元。
盘片同步旋转,转动一个角度,外圈比内圈的线速度更快,磁头能够扫过的扇区数更多,因此读写越外圈磁道中的数据比越内圈更快。
向磁盘写数据是从外圈柱面向内圈柱面写的,只有写完一个柱面才写下一个柱面。因此磁盘用过一段时间后存储东西的速度会有所减慢就是因为外圈柱面已经用掉了。
1.2分区
分区是为了在逻辑上将某些柱面隔开形成边界。它是以柱面为单位来划分的,首先划分外圈柱面,然后不断向内划分。
由于读写越外圈磁道中的数据比越内圈更快,所以第一个分区在读写性能上比后面的分区更好。在Windows操作系统上,C盘的速度是最快的,越后面的区越慢就是这个原因。
在磁盘数据量非常大的情况下,划分分区的好处是扫描块位图等更快速:不用再扫描整块磁盘的块位图,只需扫描对应分区的块位图。
1.3 MBR分区方法
MBR:主引导记录(Master Boot Record),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区.由于这一扇区承担有不同于磁盘上其他普通存储空间的特殊管理职能,作为管理整个磁盘空间的一个特殊空间,它不属于磁盘上的任何分区,因而分区空间内的格式化命令不能清除主引导记录的任何信息。主引导扇区由三个部分组成(共占用512个字节):
- 主引导程序即主引导记录(MBR)(bootloader,占446个字节):可在FDISK程序中找到,它用于硬盘启动时将系统控制转给用户指定的并在分区表中登记了的某个操作系统。
- 磁盘分区表项(DPT,Disk Partition Table):由四个分区表项构成(每16个字节标识一个分区)。
- 结束标志(占2个字节):AA55
在Linux中,MBR格式的磁盘主分区号从1-4,扩展分区号从2-4,逻辑分区5+;
MBR最大支持2T(32位表示扇区,2^32*512)。
hexdump -C /dev/sda -n512 # 查看sda硬盘的前512个字节 dd if=/dev/sda of=/data/MBR_bak bs=1 count=512 # 备份sda这块银盘的前512字节至/data/MBR_bak文件
1.4 GPT分区
GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)
2.分区命令:
小技巧: 对于在vmare 下直接添加的硬盘,在不重启机器的情况下通过fdisk -l或lsblk都无法识别刚刚新加的硬盘,我们可以通过这条命令来识别刚刚添加的硬盘;
第一步: ls /sys/class/scsi_host/ host0host1host2 第二步: echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/scsi_host/host1/scan echo "- - -" > /sys/class/scsi_host/host2/scan 第三步: lsblk fdisk -l # 即可看到刚刚添加的硬盘
2.1 fdisk 针对MBR分区
fdisk - manipulate disk partition table : 对于一块硬盘来讲,最多只能管理15个分区
如果一个存储设备已经分过区,那么它可能是mbr格式的,也可能是gpt格式的,如果已经是mbr格式的,则只能继续使用fdisk进行分区,
如果已经是gpt格式的,则只能使用gdisk进行分区。
使用fdisk分区,它只能实现MBR格式的分区
fdisk [选项] device
[root@CentOS7 ~]#fdisk /dev/sda 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. # 改变将只保存在内存中,直到你作出决定 Command (m for help): m # m获取帮助 Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition # 删除分区 g create a new empty GPT partition table # 创建一个新的GPT分区表 G create an IRIX (SGI) partition table l list known partition types # 罗列各种分区类型(82 代表swap) 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) # 额外功能(仅限专家)
2.1.1、新建逻辑分区:(同样的操作可新建主分区)
[root@CentOS7 ~]#fdisk /dev/sda Command (m for help): n # 新建分区 All primary partitions are in use Adding logical partition 7 # 此处显示所有的主分区都在使用中,只能添加逻辑分区7 First sector (220209152-419430399, default 220209152): +5G # 一般直接回车,表示新建的分区从磁盘220209152-419430399哪个data block开始 Partition 7 of type Linux and of size 5 GiB is set Command (m for help): w The partition table has been altered!
通过fdisk -l
命令查看分区已经建好
分区结束,w保存退出。如果不保存,则按q退出。
因为上面的fdisk操作是在内存中执行的,w保存退出后,
2.1.2、系统内核是否已经识别新的分区:cat /proc/partition
2.1.3、所以要通过命令让内核识别分区,才能进行格式化:
CentOS 5:partprobe [device]
CentOS 6,7:
partx, kpartx
partx -a [device]-n M:N :指明从哪个分区编号到哪个分区结束
kpartx -af [device]
注意:如果是删除分区,我们也要同步,命令为:
partx -d --nr 1-2 /dev/sdb 表示同步删除/dev/sdb里的1-2分区
注意:一般分区完结尾出现“Syncing disks.” 则已经同步完成,不再需要执行partprobe
。
补充:
在用shell写脚本的过程中,如何新建分区:
echo -e "n p +1G w " | fdisk /dev/sdc # 利用echo管道 在sdc建立一个1G的主分区; # 第二种方法; fdisk /dev/sdc << EOF #利用多行重定向输入
2.2 parted 分区工具
parted - a partition manipulation program
parted [options] [device [command [options...]...]]
parted支持mbr格式和gpt格式的磁盘分区。它的强大在于可以一步到位而不需要不断的交互式输入
parted [options] [device [command [options...]...]] # option: -l lists partition layout on all block devices ,显示全部块设备 # command [options...]... print Display the partition table. mkpart part-type [fs-type] start end # Make a part-type partition for filesystem fs-type (if specified), beginning at start and ending at end (by default in megabytes). fs-type can be one of "btrfs", "ext2", "ext3", "ext4", "fat16", "fat32", "hfs", "hfs+", "linux-swap", "ntfs", "reiserfs", or "xfs". part-type should be one of "primary", "logical", or "extended". 示例: parted /dev/sdc mkpart extended ext4 9666 12000 #表示将
3.文件系统,格式化
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统;
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等;
各种类型的文件系统:
Linux文件系统:ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
光盘:iso9660
Windows:FAT32, exFAT,NTFS
Unix: FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统: fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统
文件系统的组成部分:
内核中的模块:ext4,xfs , vfat
用户空间的管理工具: mkfs ,ext4,mkfs , xfs , mkfs
格式化的过程就是创建文件系统的过程,可以使用mkfs(make filesystem)工具进行格式化,也可以使用该工具家族的其他工具如mkfs.ext4/mkfs.xfs等专门针对文件系统的工具。
查看当前系统支持的文件系统:cat /proc/filesystems
补充:
- buffer:缓冲器,在将数据写入磁盘前,数据是存放在buffer上的,然后再写入磁盘;buffer决定写入速度
- cache:缓存,cpu读取磁盘的数据是从cache中读取的,也就是说cache性能越好,读取磁盘数据越快;
3.1 mkfs命令
mkfs - build a Linux filesystem
该命令在制作ext系统文件格式时调用的是mke2fs
命令
mkfs [options] [-t type] [fs-options] device [size]
创建文件系统:
mkfs 命令:
(1) mkfs.FS_TYPE /dev/DEVICE
FS_TYPE : ext4 , xfs ,brtfs , vfat
e.g mkfs.ext4 /dev/sda5
(2) mkfs -t FS_TYPE -f -L /dev/device
-L 'Lable' : 指定卷标名
要查看支持的文件系统类型,只需简单的输入mkfs然后按两下tab键,就可以列出各文件系统对应的格式化命令,这些就是支持的文件系统类型:
CentOS 6: [root@CentOS6 ~]#mkfs mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.ext4dev mkfs.msdos mkfs.vfat # # # CentOS 7: [root@CentOS7 ~]#mkfs mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.fat mkfs.minix mkfs.msdos mkfs.vfat mkfs.xfs
也可以直接 mkfs -t FS_TYPE /device # 确定格式化的文件类型
blkid 分区名称 : 显示该分区属性信息 (如果输入命名没有反应,说明没有还没有做文件系统)
3.2 mke2fs工具
mke2fs,是ext系列文件系统专用管理工具。该工具创建文件系统时,会从/etc/mke2fs.conf配置中读取默认的配置项。
mke2fs - create an ext2/ext3/ext4 filesystem
mke2fs [ -c | -l filename ] [ -b block-size ] [ -D ] [ -f fragment-size ] [ -g blocks-per-group ] [ -G number-of-groups ] [ -i bytes-per-inode ] [ -I inode-size ] [ -j ] [ -J journal-options ] [ -N number-of-inodes ] [ -n ] [ -m reserved-blocks-percentage ] [ -o creator-os ] [ -O feature[,...] ] [ -q ] [ -r fs-revision-level ] [ -E extended-options ] [ -v ] [ -F ] [ -L volume-label ] [ -M last-mounted-directory ] [ -S ] [ -t fs-type ] [ -T usage-type ] [ -U UUID ] [ -V ] device [ blocks-count ] mke2fs -O journal_dev [ -b block-size ] [ -L volume-label ] [ -n ] [ -q ] [ -v ] external-journal [ blocks-count ] ### # option: -t fs-type # 指定要创建的文件系统类型(ext2,ext3 ext4),若不指定,则从/etc/mke2fs.conf中获取默认的文件系统类型。 -b block-size # 指定每个block的大小,有效值有1024、2048和4096,单位是字节。 -I inode-size # 指定inode大小,单位为字节。一般128或256字节 -i bytes-per-inode # 指定每多少个字节就为其分配一个inode号。值越大,说明一个文件系统中分配的inode号越少,更适用于存储大量大文件,值越小,inode号越多,更适用于存储大量小文件。
该值不能小于一个block的大小,因为这样会造成inode多余。注意,创建文件系统后该值就不能再改变了。 -c # 创建文件系统前先检查设备是否有bad blocks。 -f fragment-size # 指定fragments的大小,单位字节。 -g blocks-per-group # 指定每个块组中的block数量。不建议修改此项。 -G number-of-groups # 该选项用于ext4文件系统(严格地说是启用了flex_bg特性),指定虚拟块组(即一个extent)中包含的块组个数,必须为2的幂次方。对于ext4文件系统来说,使用extent的功能能极大提升其性能。 -j # 创建带有日志功能的文件系统,即ext3。如果要指定关于日志方面的设置,在-j的基础上再使用-J指定,不过一般默认即可,具体可指定的选项看man文档。 -L new-volume-label # 指定卷标名称,名称不得超出16字节。一般设定为挂载点的名字 -m reserved-blocks-percentage # 指定文件系统保留block数量的比例,保留一部分block,可以降低物理碎片。默认比例为5%。 -N number-of-inodes # 强制指定该文件系统应该分配多少个inode号,它会覆盖通过计算得出inode数量的结果(根据block大小、数量和每多少字节分配一个inode得出Inode数量),但是不建议这么做。 -q # 安静模式,可用于脚本中 -S # 重建superblock和group descriptions。在所有的superblock和备份的superblock都损坏时有用。它会重新初始化superblock和group descriptions,但不会改变inode table、bmap和imap(若真的改变,该分区数据就全丢了,还不如重新格式化)。在重建superblock后,应该执行e2fsck来保证文件系统的一致性。但要注意,应该完全正确地指定block的大小,其改选项并不能完全保证数据不丢失。 -v # 输出详细执行过程 -O FEATURE[,...] # 启用指定特性 -O ^FEATURE # 关闭指定特性
以上mke2fs命令常用选项有:
-b :每个block大小
-L :创建卷标
-i :每多少个block分配一个inode
-t :创建的文件类型
-m :预留块数量
示例:
CentOS 6:
[root@CentOS7 ~]#mke2fs -t ext4 -b 4096 -L hahahaha /dev/sda6 mke2fs 1.42.9 (28-Dec-2013) Filesystem label=hahahaha OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1342177280 40 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done CentOS 6 [root@CentOS6 ~]#mke2fs -t ext4 -b 4096 -L mydata /dev/sda6 mke2fs 1.41.12 (17-May-2010) Filesystem label=mydata OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 328656 inodes, 1312604 blocks 65630 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1346371584 41 block groups 32768 blocks per group, 32768 fragments per group 8016 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 38 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
3.3 e2label 查看、设置卷标
查看:e2label device
设定:e2label device LABEL
> tune2fs -L NEWLABEL /device 也可以修改卷标
注意:此命令只针对ext文件系统做卷标,且只有格式化后才能设置卷标
3.4 tune2fs 工具
查看或修改ext系列文件系统的某些属性
tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
tune2fs [OPTIONS] device # option: -l # 查看指定文件系统超级块的内容:super block -j:ext2 --> ext3; (ext2不带日志系统,ext3带日志系统) -L LABEL:修改卷标; -m # 调整预留空间百分比; -U UUID: 修改UUID号 tune2fs -U `uuidgen` # 以随机生成的uuid作为修改的uuid号 -O [^]FEATHER:开启或关闭某种特性: acl :开启acl功能 ^acl:关闭acl功能 (acl(access control list,访问控制列表)功能详见文件权限管理) tune2fs -l /dev/sda1 # 查看该分区超级块内容 Default mount options: user_xattr acl # 其中的这一项含有acl表示开了acl功能 tune2fs -o ^acl /dev/sda1 # 表示关闭acl功能
4.查看文件系统状态信息
4.1 lsbik
lsblk - list block devices 列出设备及其状态(主要列出非空设备)
lsblk [options] [device...]
lsblk -f
查看到文件系统类型,和文件系统的uuid和挂载点
4.2 blkid :块设备属性信息查看
blkid - locate/print block device attributes 定位/输出设备属性信息
blkid -L LABEL:根据指定LABEL来定位对应的设备
blkid -U UUID:根据指定的UUID来定位对应的设备
4.3 du
du - estimate file space usage 评估某目录总体空间占用情况
du [OPTION]... [FILE]... du [OPTION]... --files0-from=F # option: -a, --all:列出目录中所有文件的统计信息,默认只会列出目录中子目录的统计信息,而不列出文件的统计信息 -h, --human-readable:人性化显示大小 -0, --null:以空字符结尾,即"