磁盘结构磁盘分区磁盘分区管理文件系统管理挂载
一、磁盘结构
(一)设备文件
设备文件:
Linux系统中的一切都是文件,设备文件又分为块设备和字符设备。
块设备:访问单位是“块”,例如磁盘
字符设备:访问单位为“字符”,如键盘
设备编号:
主设备号:主设备号,标识设备类型。次设备号:次设备号,标识同一类型的不同设备。下图红框中,逗号前的主设备号表示设备类型,逗号后的次设备号。创建设备文件mknodmknod filepath {b | c} m n //b指块设备,c指字符设备,m指主设备号,n指次设备号
(二)磁盘设备文件命名:/dev/DEV_FILE
物理磁盘/dev/sd,虚拟磁盘/dev/vd
不同磁盘标识:a-z排序,如/dev/sda、/dev/sdb
同一磁盘上的不同分区标识符:数字顺序,从1开始,但不一定是连续数字,取决于分区方式,例如/dev/sda1、/dev/sda5
(三)磁盘物理概念
磁头:磁头。磁盘的两侧都需要配备一个磁头。磁头的数量等于磁盘表面的数量。
track:磁道,磁盘表面分为很多同心圆,每个同心圆就是一个磁道
扇区:扇区,磁道分为多个等长的扇区,每个扇区大小512字节
气缸:柱面,由硬盘上所有磁盘上相同位置的磁道组成的假想柱面
(四)磁盘寻址
磁盘寻址模式:较旧的CHS 和较新的LBA 模式
CHS 寻址
使用24位寻址,前10位代表柱面,中间8位代表磁头,最后6位代表扇区。最大寻址空间:(2^10) * (2^8) * (2^6) * 512B/(2^30)=8GBLBA 寻址
采用48bit寻址,最大寻址空间为128PB。当磁盘小于8GB时,两种寻址方式均可;当磁盘大于8GB时,必须使用LBA寻址方式。现在的硬盘容量远大于8GB,CHS寻址已经基本淘汰。
二、磁盘分区
(一)磁盘分区的优势
优化I/O 性能
实施磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个操作系统
使用不同的文件系统
(二)分区方式:MBR和GPT分区
1. MBR (Master Boot Record) 主引导记录
磁盘的0磁道和0扇区称为MBR。总共512字节的空间分配如下:
446 bytes: boot loader引导程序,Linux使用grub264 bytes: DPT分区表,每16byte描述一个分区,可以描述4个分区。 2 bytes: 55AA,结束标志,表示磁盘有数据。从分区表的容量来看,磁盘只能划分为四个分区,称为主分区。为了能够分隔更多的分区,MBR允许您创建扩展分区,然后在扩展分区内创建逻辑分区。扩展分区占据主分区位置,分区信息存储在MBR中。因此,主分区和扩展分区的总数不能超过4个。
逻辑分区的分区信息存储:扩展分区中每个逻辑分区的0扇区称为EBR扩展引导记录,其512bytes的空间分配与MBR类似。
446bytes: 未使用64byte: 分区表,前16bytes 指向此逻辑分区,第二个16bytes 指向下一个逻辑分区,剩余两个16bytes 未使用2 bytes: 55AA,结束标志BIOS(基本输入输出系统)硬件支持MBR 分区方法,导致操作系统启动
2. GPT (GUID Partition Table)
GUID(Global Unique Identifiers)全局唯一标识符:在GPT分区模式下,没有主分区、扩展分区和逻辑分区。每个分区均由128 位UUID(通用唯一标识符)标识。
GPT分区表在分区的开头和结尾自动备份,并有CRC校验位。
GPT分区支持128个分区,使用64位,支持8Z(512Byte/块)64Z(4096Byte/块)
UEFI(统一可扩展固件接口)硬件支持GPT分区方式,使操作系统能够启动
(三)磁盘分区的管理
lsblk 列出块设备
磁盘分区管理工具
fdisk 创建MBR 分区gdisk 创建GPT 分区parted 高级分区操作
1、parted 命令使用
语法:parted [选项]. [设备[命令[参数].].]
用例
parted /dev/sdb mklabel gpt|msdos //创建GPT或MBR分区
parted /dev/sdb print //显示磁盘分区状态
parted /dev/sdb mkpartprimary 1 200 //创建主分区,大小1M到200M
parted /dev/sdb rm 1 //删除1号分区
parted -l //列出所有块设备分区实验:
1.为新添加的200G磁盘创建MBR分区表
命令:parted /dev/sdb mklabel msdos2。创建主分区1,大小从1M到1024M
命令:parted /dev/sdb mkpart Primary 1 1024
3、创建主分区2,大小从1025M到3072M
命令:parted /dev/sdb mkpart Primary 1025 3072
4、删除主分区2
命令:parted /dev/sdb rm 2
2、fdisk 命令使用
用法:fdisk -l [-u] [device.] //查看分区,使用-u=Columns选项以柱面为单位查看
#------------------------------------------------ - ----------------------------------#
fdisk设备//管理分区
子命令:
p //分区列表
t //改变分区类型
n //创建一个新分区
d //删除分区
v //验证分区
u //转换单位
w //保存并退出
q //退出实验,不保存: 1、添加一个新的100G磁盘/dev/sdb,并以扇区和柱面查看磁盘分区信息。
命令:
fdisk -l /dev/sdb
fdisk -l -u=柱面/dev/sdb2。磁盘分区:第一个主分区500M,第二个主分区10G,扩展分区50G,其中第一个逻辑分区20G,第二个逻辑分区占用剩余扩展分区空间
2.1命令fdisk /dev/sdb后,进入提示页面,输入n创建新分区:
(1)提示选择分区类型时,输入p或直接回车创建新的主分区;
(2) 提示选择分区号,默认为1,按回车选择默认设置;
(3)提示启动分区时,按回车,按默认设置;
(4)当提示输入分区结束扇区时,输入+500M,代表分区大小为500M,回车完成第一个主分区设置。其余分区设置基本类似,按照提示操作即可。
2.2 分区创建后,输入p查看分区列表
3、删除第一个20G逻辑分区,查看分区表,发现原来的第二个逻辑分区的名称发生了变化,这证明磁盘的命名不稳定。编写脚本时,应特别注意防止硬盘设备名称出现在代码中。
4、删除50G扩展分区,发现内部逻辑分区也被同时删除了。
5.退出而不保存分区设置:输入q
gdisk 用于GPT 分区,用法与fdisk 类似。
3、同步分区表
使用分区工具划分分区后,需要将磁盘上的分区信息同步到内存中。
检查内核是否识别到新分区:cat /proc/partitions
在CentOS 6 上同步分区Partx 或kpartx
partx -a /dev/device //同步添加的分区,-a添加分区
kpartx -a /dev/device //同步添加的分区,-f 强制同步分区表
partx -d --nr M-N /dev/device //同步缩小的分区,-d删除分区,-nr指定删除分区范围
kpartx -d /dev/device //同步缩小的分区。在CentOS 5和CentOS 7上同步分区partprobepartprobe [/dev/device] //同步分区
三、文件系统
功能:为存储设备组织和分配空间
查看系统支持的文件系统类型: ls /lib/modules/`uname -r`/kernel/fs
文件系统类型
linux:ext2、ext3、ext4、xfs、swap CD :iso9660 Windows:fat32、exfat、ntfs 网络文件系统:NFS、CIFSRAW:未经处理或取消格式化生成的文件系统是否支持日志
支持的日志:ext3、ext4、xfs 不支持的日志:ext2、vfat
四、文件系统管理
(一)创建文件系统 mkfs
语法:mkfs.fstype /dev/device //fstype: ext3、ext4、xfs .etc
mkfs -t fstype /dev/device //fstype: ext3,ext4,xfs .etcmke2fs:ext文件系统专用管理工具,使用mkfs自动调用该命令创建ext文件系统
选项:-t {ext2 | ext3 | ext4} //分区类型
-b {1024 | 2048 | 2048第4096章
-L "LABEL" //指定卷标
-j //相当于-t ext3,mkfs.ext3=mkfs -t ext3=mke2fs -j=mke2fs -t ext3
-i # //inode标识多少字节的空间,不小于块大小,格式化后不能改变
-N # //指定分区中创建多少个inode
-I # //一条inode记录占用的磁盘空间大小,范围:128到4096,格式化后不能更改
-m # //为管理员保留的空间占总空间的百分比,默认5%
-O FEATURE //启用指定功能
-O ^FEATURE //关闭指定功能实验:
现在有三个分区尚未创建文件系统。使用以下配置创建它们:
(1)/dev/sdb1,ext3分区,卷标‘USER’;
(2)/dev/sdb2,ext4分区,块大小2048字节,2048字节/inode;
(3)/dev/sdb3,ext4分区,预留空间占2%。命令:mkfs.ext3 -L "USER" /dev/sdb1
mke2fs -t ext4 -b 2048 -i 2048 /dev/sdb2
mkfs -t ext4 -m 2 /dev/sdb3 为/dev/sdb1建立文件系统后,显示信息:第一个红框表示卷标设置成功,第二个红框表示还有5%默认情况下的分区空间。为超级用户保留,第三个红框表示超级块备份到分区中的很多地方
为/dev/sdb2建立文件系统后,显示的信息:红框中的inode数量和块数量基本一致。这是因为块大小与文件系统建立时每个inode标识块的大小相同。 -i选项的值应该大于-b选项的值,这样生成的inode数量将小于块数量。否则,inode的数量大于块的数量,多余的inode就会被浪费。
为/dev/sdb3创建文件系统后,显示信息: 红框中为超级用户保留的空间为总空间的2%。
(二)管理文件系统
blkid 查询块设备属性blkid -U UUID //根据指定的UUID查询设备
blkid -L LABLE //根据指定LABLE查询设备findfs查找分区,功能与blkid findfs类似UUID="uuid" //根据指定UUID查询设备
findfs LABEL="label" //根据指定LABLE查询设备tune2fs,修改ext文件系统的可修改属性-l //查看指定文件系统的超级块信息
-L "LABEL" //修改卷标,也可以使用e2label /dev/device label来修改
-m # //修改为管理员保留的空间百分比
-j //将ext2升级为ext3,即添加日志记录功能
-O //启用或禁用文件系统属性。要禁用,请在属性前添加^。
-o //调整文件系统默认挂载选项,禁止在属性前添加^
-U UUID //修改UUID号实验:调整分区/dev/sdb2中为管理员保留的空间百分比为3%,添加卷标"TWO",并添加挂载属性的acl支持
命令:tune2fs -l /dev/sdb2
une2fs -L "TWO" -m 3 -o acl /dev/sdb2 首先使用-l选项查看当前文件系统的配置信息。第一个红框表示默认挂载选项为空,第二个红框38556/771120=5%表示为管理员保留的5%空间率。
修改文件系统属性后,再次检查,如图红框所示:添加了acl挂载选项,为管理员保留的空间率变为23133/771120=3%。
dumpe2fs 显示超级块和块组信息dumpe2fs /dev/device //显示设备的超级块和块组信息
dumpe2fs -h /dev/device //只显示设备的超级块信息
(三)文件系统检测和修复
经常出现在崩溃或意外关机后
文件系统修复必须处于未挂载状态
fsck(File System Check)文件系统修复工具
语法,有以下两种格式:
fsck.FS_TYPE [选项] /dev/device
fsck -t FS_TYPE [选项] /dev/设备
选项:
-p: 自动修复错误
-r: 交互错误修复
e2fsck ext 文件系统修复工具
e2fsck -y /dev/device //修复过程自动回答yes
e2fsck -f /dev/device //strong制检测并修复分区,即使分区没有问题,也进行实验:修复文件系统
命令:dumpe2fs /dev/sdb1 |头-100
dd if=/dev/0 of=/dev/sdb1 bs=1 计数=4096
une2fs -l /dev/sdb1
e2fsck -y /dev/sdb1 首先使用dumpe2fs命令查看块组信息。图中第2行表示/dev/sdb1分区的主超级块位于块1,接下来考虑破坏块1导致磁盘文件系统损坏。
可以看到,使用dd命令破坏/dev/sdb1分区的前4096字节后,磁盘损坏,提示找不到有效的系统超级块。
可以看到/dev/sdb1已成功修复,红框内文件系统状态为clean。
五、挂载 mount
Mount:文件系统与当前目录树中的某个目录建立连接,从而通过进入目录来访问文件系统
卸载:解除文件系统与挂载目录的关联
挂载的目录称为挂载点。挂载后,该目录的内容将被暂时隐藏,无法访问。
挂载点一般为空目录,以避免无法访问目录原始内容的问题。
(一)mount 挂载命令
语法:mount [选项] device mount_point
分区设备:包括设备文件、UUID、卷标、伪文件系统
UUID: -U "UUID" 标签:-L "标签"
挂载点:建议使用空目录
选项:
-t vsftype //指定要挂载设备的文件系统类型。如果不指定,系统将检测文件系统类型。
-r //readonly,只读挂载
-w //读写,读写挂载
-n //不更新/etc/mtab,挂载不可见
-a //自动挂载所有支持自动挂载的设备(在/etc/fstab文件中定义,挂载选项具有auto功能)
-L "LABEL" //指定挂载设备的卷标
-U "UUID" //指定UUID挂载的设备
-B, --bind //将目录绑定到另一个目录-o 挂载文件系统子选项: async //异步模式
sync //同步方式—— 内存变化时同时写入磁盘
atime/noatime //是否更新文件系统文件和目录的atime时间戳
diratime/nodiratime //是否更新目录的atime时间戳
auto/noauto //是否支持自动挂载,即是否支持-a选项
exec/noexec //是否支持在文件系统上运行应用程序
dev/nodev //该文件系统是否支持设备文件
suid/nosuid //是否支持suid、sgid权限
remount //重新挂载,在给只读文件系统添加写属性时常与-rw选项一起使用
ro //只读
rw //读写
user/nouser //是否允许普通用户挂载此设备,使用/etc/fstab
acl //在此文件系统上启用acl功能
Loop //使用循环设备
defaults //相当于rw, suid, dev, exec, auto, nouser, async, and relatimecat /proc/mounts 查看内核跟踪的所有挂载设备,使用mount -n选项挂载也可以看到
实验:
按以下要求安装:
(1) /dev/sdb1挂到/mnt/dir1并且不更新时间戳。
(2)/dev/sdb2以只读模式挂载到/mnt/dir2,然后直接改为读写模式,无需卸载
(3)/dev/sdb3挂在/mnt/dir3上,不支持suid和sgid权限,不更新/etc/mtab
(4)将/app/file1文件挂载到/mnt/dir4
(5)挂载/etc目录到/mnt/dir5
(6)挂载/dev/sdb2到/mnt/dir6
命令:
//第一步
挂载-o noatime /dev/sdb1 /mnt/dir1
//第二步
挂载-o ro /dev/sdb2 /mnt/dir2
mount -o 重新挂载,rw /dev/sdb2 /mnt/dir2
//第三步
挂载-o nosuid -n /dev/sdb3 /mnt/dir3
//第四步
dd if=/dev/zero of=/app/file1 bs=1M 计数=500
mkfs -t ext3 /应用程序/文件1
挂载-o循环/app/file1/mnt/dir4
//第五步
挂载-B /etc /mnt/dir5
//第六步
挂载/dev/sdb2 /mnt/dir6
mount /dev/sdb3 /mnt/dir1 第一步挂载成功。
第二步,第一次挂载时使用只读模式,导致无法创建新文件;再次挂载时改为读写模式,并成功创建新文件。
第三步,挂载后无论是df命令还是mount命令都看不到/dev/sdb3的挂载信息。
此时只能从/proc/mounts中看到。
将/bin/cat 文件复制到/mnt/dir3 并为其添加suid 权限。以普通用户身份登录并尝试访问/etc/shadow 文件,但失败。此时重新挂载并更改属性为suid,然后以普通用户登录并尝试访问/etc/shadow文件成功。
第四步,使用dd命令创建文件,使用mkfs命令创建文件系统。 df结果证明该文件也可以挂载。
第五步:挂载时使用-B选项即可挂载成功。这时候发现原来目录和挂载点目录下的文件是一模一样的,并且有一个特殊的现象,同一个文件的inode号是一样的,但是inode节点数是1 。
第六步:将/dev/sdb2挂载到/mnt/dir6,发现挂载成功。 /mnt/dir2 和/mnt/dir6 都可以访问/dev/sdb2 分区的内容。将/dev/sdb3挂载到/mnt/dir1后发现挂载成功,但是/mnt/dir1访问了/dev/sdb3分区的内容,而/dev/sdb1分区的内容被隐藏了。所以,单个分区可以挂载到不同目录,但不要把几个分区挂载到同一个目录。
(二)unmount 卸载命令
卸载之前,需要确保文件系统没有被进程访问。如果是,则需要查询是什么进程正在访问文件系统。如有必要,需要终止占用进程。
检查安装状态
查找挂载点|设备
查看访问文件系统的进程
//两个命令都可用
lsof 挂载点
fusionr -v mount_point 终止访问文件系统的进程
熔凝器-km 安装点
卸载
umount 挂载点|设备
当进程访问时卸载分区
在另一个终端使用vim访问/mnt/dir1目录下的文件,使用lsof或fuer -v发现访问程序,使用fuer -km命令强制结束访问该分区的vim程序,从而成功卸载分区。
(三)/etc/fstab 文件
/etc/fstab 文件用于配置文件系统系统。系统启动时,根据该文件的设置来挂载文件系统。 mount 和fsck 等工具也使用它。
/etc/fstab文件格式:每一行定义一个要挂载的文件系统,如下
待挂载的文件系统:可以是设备文件、UUID、LABEL和伪文件系统(如proc)挂载点文件系统类型挂载选项:默认备份频率:0-不备份;每日1 次备份; 2-每隔一天备份自检订单:0-不自检; 1-先自检。一般只对根文件系统进行设置实验:系统启动时会自动挂载该分区,如下:
(1)/dev/sdb1挂载到/mnt/dir1
(2)将/app/file1文件挂载到/mnt/dir4
(3)挂载/etc目录到/mnt/dir5
编辑/etc/fstab 文件并添加以下行:
UUID=c825e990-eb35-49b1-9f94-72b06786b612 /mnt/dir1 ext3 默认0 0
/app/file1 /mnt/dir4 ext3 循环0 0
/etc /mnt/dir5 none bind 0 0 通过blkid 查看/dev/sdb1 的UUID,用于编辑/etc/fstab 文件。编辑完成后,重新启动系统将根据/etc/fstab的设置启动各个分区。当新添加的配置信息的挂载选项中有auto时(默认有auto,直接写loop或者bind也包含默认选项),执行mount -a选项会自动挂载带有auto的新文件/etc/fstab选项。添加条目。
(四)交换分区:系统内存的补充交换分区设置步骤: 创建交换分区fdisk或文件,注意改变分区类型使用mkswap命令写入特殊签名在/etc/fstab文件中添加条目使用swapon -a激活交换分区启用交换分区swapon [options] [device] -a //激活所有交换分区 -p priority //指定优先级,priority=0~32767,值越大优先级越高禁用交换分区swapoff [options] [device] 交换分区优先级: 交换分区优先级值越大优先级越高系统指定的交换分区优先级从-1开始,每加入一个用户没有指定的交换分区,其优先级减一,故越早加入的系统指定交换分区优先级越高用户指定的交换分区优先级范围:0-32767,所以任意用户指定的交换分区优先级高于系统指定调整交换分区优先级用于优化性能,提高存取速度较快的交换分区优先级实验:交换分区的设置 命令: fdisk /dev/sdb5 mkswap /dev/sdb5 vim /etc/fstab swapon -a swapoff -a分区时注意改变作为交换分区的分区system id,通过fdisk工具的t选项将id号由默认83改为82 建立swap分区,通过blkid命令可以看到/dev/sdb5已经成为swap分区 vim编辑/etc/fstab文件,增加条目,内容如下: UUID=2b29e986-cd2c-435e-9431-6636c834a1e5 swap swap defaults 0 0挂载交换分区成功,查看优先级发现系统默认新添加的交换分区优先级低于旧交换分区 再次编辑/etc/fstab文件,将/dev/sdb5分区的挂载选项增加pri值为10,再次挂载交换分区,此时发现/dev/sdb5的优先级最高(五)挂载移动介质
访问移动介质前必须挂载 摘除移动介质前必须卸载 挂载点通常在/media和/mnt下1. 使用光盘
光盘自动挂载目录:/run/media// 手动挂载:mount /dev/cdrom /mnt 卸载并弹出光盘:eject 创建iso文件: cp /dev/cdrom filename.iso //从光盘创建iso文件 mkisofs -r -o filename.iso /path //将目录下的所有文件打包为iso文件实验:将CentOS 6.9 两张光盘内容合成为一个iso文件 命令://first step 将光盘1的内容复制到/app/CentOS_6.9_Final_Everything目录下 cp -r /media/CentOS_6.9_Final/ /app/CentOS_6.9_Final_Everything //second step 将光盘2的内容复制到/app/CentOS_6.9_Final_Everything目录下 cp -r /media/CentOS_6.9_Final/Packages/* /app/CentOS_6.9_Final_Everything/Packages/ //third step 安装mkdvdiso.sh的依赖isomd5sum yum install isomd5sum //final step 执行mkdvdiso.sh生成可启动的iso文件 bash mkdvdiso.sh /app/CentOS_6.9_Final_Everything/ /app/CentOS_6.9_x86_64_Final_Everything.iso2. 挂载USB介质
查看USB设备是否被识别lsusb USB介质会被内核识别为SCSI设备,设备编号类似/dev/sdb1 自动挂载目录:/run/media// 手动挂载:mount /dev/sdb1 /mnt(六) 磁盘管理常用工具
free 内存空间状态查询 free [-m | -g | -h] //-m 以MB为单位,-g 以GB为单位,-h以人类易读方式显示 df 文件系统占用等信息查询 df [options] [files] -H //以1000为单位 -h //以人类易读方式显示 -i //显示节点号 -T //显示文件系统类型du 查看目录总体空间占用情况du [options] dir -h //以人类易读方式显示 -s //显示摘要信息dd 转化并复制文件 语法:dd if=/path/to/src of=/path/to/dest bs=# count=# 解释:if //从设备文件、文件处输入 of //输出至文件 bs //指定输入、输出的块大小 ibs //一次输入块的大小 obs //一次输出块的大小 cbs //一次转化块的大小 skip //从开头忽略输入的块数 seek //从开头忽略输出的块数 count //拷贝记录数应用: dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 //备份MBR dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446 //破坏MBR的分区表 dd if=/dev/sda of=/dev/sdb //将磁盘/dev/sda整体备份至/sdb/sdb dd if=/dev/sda of=/path/to/image //将磁盘/dev/sda整体备份为image文件【《深度解析:高效磁盘管理策略》】相关文章:
用户评论
这篇文章应该介绍一下磁盘管理的基本概念吧?
有16位网友表示赞同!
终于要学习一下磁盘管理了!
有17位网友表示赞同!
磁盘空间用完了怎么办?赶紧来看看这篇教程吧!
有19位网友表示赞同!
希望这篇文章能教我如何优化磁盘性能
有10位网友表示赞同!
想要了解分区和格式化吗?这篇博文应该有答案。
有18位网友表示赞同!
学习管理硬盘,提升电脑运行速度绝对是好事!
有12位网友表示赞同!
感觉自己对电脑的硬件了解还是太少了,需要学习一下这些概念了。
有7位网友表示赞同!
好久没清理磁盘空间了,看来时机到了!
有8位网友表示赞同!
磁盘碎片化是什么东西?这篇文章应该能解释清楚吧?
有11位网友表示赞同!
希望能看到一些实用的磁盘管理技巧啊!
有7位网友表示赞同!
学习管理硬盘,避免数据丢失也是非常重要的。
有10位网友表示赞同!
想尝试安装其他系统的用户可以参考这篇博文。
有12位网友表示赞同!
磁碟管理好複雜喔!希望這篇文章能讓我看得懂。
有17位网友表示赞同!
终于有人写了关于磁盘管理的教程了!快去看看吧!
有12位网友表示赞同!
这篇文章对新手小白也很友好吗?
有12位网友表示赞同!
希望能了解更多关于SSD和固态硬盘的信息。
有8位网友表示赞同!
学习磁盘管理,让电脑运行更流畅!
有12位网友表示赞同!
我想要提升我的系统性能,这篇文章应该能给我一些建议吧?
有9位网友表示赞同!
掌握磁盘管理知识可以让我们更好地保护数据安全。
有9位网友表示赞同!
磁盘空间越来越紧张了,看看能不能从这篇文章学到一些方法吧!
有17位网友表示赞同!