1、磁盘结构(机械硬盘)
(1)磁盘构成:
磁臂(机械手臂):连接并固定磁头 马达(电机):可以转动盘片,让磁臂上的磁头可以在盘片上读写数据 扇区:最小的物理存储单位,每个扇区为512bytes 磁头:可以读写数据 盘片:主要记录数据 柱面:将扇区组成一个圆就是柱面,柱面是分区的最小单位
(2)磁盘接口
并口:IDE SCSI /dev/hd[a-z] 串口:SATA NAS USB /dev/sd[a-z]
(3)设备文件(Linux下一切皆文件)
设备文件定义: 每个设备都有一个文件作为它的访问入口,此文件就称之为设备文件;该文件关联至少一个设备驱动程序,进而能够跟与之对应的硬件设备进行通信。 设备号码: 用来标识设备,不同类别的设备有不同的设备号,同一类别的设备有不同的设备或多个设备,因此就有主设备号和次设备号。主次设备用逗号隔开,主设备在前面,次设备在后面。 主设备号:标识设备类型 次设备号:标识同一类型下的不同设备
2、分区类型
(1)MBR(Master Boot Record):主引导记录
一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序。 磁盘的第0柱面第0扇区(共512bytes)即为MBR,以柱面为分区单位。它由三部分组成: 主引导程序:存储boot loader,引导加载程序,共446bytes 硬盘分区表:记录硬盘的分区个数及其大小,共64bytes,其中每16bytes标识一个分区,因此,一个硬盘只能分四个主分区。 分区有效标记:共两个十六进制数:55AA,用于标识MBR是有效的,因此不能去修改,否则会导致机器不能启动。 注意: 1)一个硬盘的主分区与扩展分区加起来最多4个,而且扩展分区最多只能有一个 2)逻辑分区是由扩展分区的再分区出来的 3)逻辑分区和扩展分区可以格式化,扩展分区无法格式化 4)逻辑分区的数量依操作系统而不同,Linux系统中,IDE硬盘最多59个逻辑分区(5号到63号),SATA硬盘最多有11个逻辑分区(5号到15号) 5)当磁盘容量大于2T时,现在的MBR机制是无法识别2T以后的磁盘空间的,此时需要使用GPT机制来进行分区
(2)GPT(GUID(Globals Unique Identifiers) partition table):全局唯一标识符分区表
GPT是基于UEFI(统一扩展固件接口)的硬盘分区结构。在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR(Protective MBR),之后才是GPT头。 GPT特点: 1)GUID 分区表 (GPT) 磁盘分区样式支持最大卷为 18 EB (exabytes) 并且每磁盘最多有 128 个分区 2)GPT 分区磁盘有多余的主要及备份分区表来提高分区数据结构的完整性 3)GPT 在磁盘最后备份了磁盘的分区表 4)可以将 MBR 磁盘转换为 GPT 磁盘,并且只有在磁盘为空的情况下,才可以将 GPT 磁盘转换为 MBR 磁盘
3、管理分区
(1)lsblk命令
lsblk命令用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,cd-ROM等等
NAME:这是块设备名。 MAJ:MIN:显示主要和次要设备号。 RM:显示设备是否可移动设备。值为1表示可移动设备。 SIZE:列出设备的容量大小信息。 RO:该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。 TYPE:显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。 MOUNTPOINT:指出设备挂载的挂载点。
1)语法
lsblk [options] [device...]
2)选项
-a, --all 打印所有设备 -b, --bytes 以字节为单位而非易读的格式来打印 SIZE -d, --nodeps 不打印从属设备(slave)或占位设备(holder) -D, --discard 打印时丢弃能力 -e, --exclude <列表> 根据主设备号排除设备(默认:内存盘) -I, --include <列表> 只显示有指定主设备号的设备 -f, --fs 输出文件系统信息 -h, --help 使用信息(此信息) -i, --ascii 只使用 ascii 字符 -m, --perms 输出权限信息 -l, --list 使用列表格式的输出 -n, --noheadings 不打印标题 -o, --output <列表> 输出列 -p, --paths 打印完整设备路径 -P, --pairs 使用 key=“value” 输出格式 -r, --raw 使用原生输出格式 -s, --inverse 反向依赖 -t, --topology 输出拓扑信息 -S, --scsi 输出有关 SCSI 设备的信息
(2)fdisk命令
管理磁盘分区表工具。fdisk用于创建MBR分区,对于一块硬盘,最多只能管理15个分区。同时也支持GPT分区,但是还处于试验阶段,因此不推荐用fdisk管理GPT分区。
1)语法
fdisk [选项] <磁盘> 更改分区表 fdisk [选项] -l <磁盘> 列出分区表 fdisk -s <分区> 给出分区大小(块数)
2)选项:
-l 查看磁盘分区 -b <大小> 扇区大小(512、1024、2048或4096) [root@localhost ~]# fdisk -b 1024 /dev/sdb -c[=<模式>] 兼容模式:“dos”或“nondos”(默认) -h 打印此帮助文本 -u[=<单位>] 显示单位:“cylinders”(柱面)或“sectors”(扇区,默认) -v 打印程序版本 -C <数字> 指定柱面数 -H <数字> 指定磁头数 -S <数字> 指定每个磁道的扇区数
3)子命令
在fdisk分区操作时,有许多子命令,可以使用子命令 m 来查看,不同分区格式选项有所区别。如: 命令(输入 m 获取帮助):m 命令操作 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 G create an IRIX (SGI) partition table 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 u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
4)创建一个扇区大小为1024,总容量为1G的分区
[root@localhost ~]# fdisk -b 1024 /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 m 获取帮助):n All primary partitions are in use 添加逻辑分区 5 起始 扇区 (20974592-23070719,默认为 20974592): 将使用默认值 20974592 Last 扇区, +扇区 or +size{K,M,G} (20974592-23070719,默认为 23070719):+1G 分区 5 已设置为 Linux 类型,大小设为 1 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:42.9 GB, 42949672960 字节,41943040 个扇区 Units = 扇区 of 1 * 1024 = 1024 bytes 扇区大小(逻辑/物理):1024 字节 / 1024 字节 I/O 大小(最小/最佳):1024 字节 / 1024 字节 磁盘标签类型:dos 磁盘标识符:0xc6b58e7c 设备 Boot Start End Blocks Id System /dev/sdb1 2048 4196351 4194304 83 Linux /dev/sdb2 4196352 14682111 10485760 83 Linux /dev/sdb3 14682112 20973567 6291456 83 Linux /dev/sdb4 20973568 23070719 2097152 5 Extended /dev/sdb5 20974592 22023167 1048576 83 Linux
(3)查看内核 是否已经识别新的分区3个方法
cat /proc/partitions lsblk ls /dev/[h,s]d*
(4)通知内核重新读取硬盘分区表
已有分区处于使用状态时,新建的分区需要让内核重新读取分区表才能显示。 CentOS 5,7:使用partprobe CentOS 6,7: 新增分区:使用partx -a [device] kpartx -af [device] 删除分区:使用partx -d [device]
(5)parted命令
管理调整磁盘分区和分区大小,其操作都是实时生效的,小心使用 用法:parted [ 选项]... [备 设备 [令 命令 [ 参数]...]...] parted /dev/sdb mklabel gpt|msdos parted /dev/sdb print parted /dev/sdb mkpart primary 1 200 (默认M) ) parted /dev/sdb rm 1 parted -l http://man.linuxde.net/parted(参考)
4、管理文件系统
(1)文件系统介绍
操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。文件系统是操作系统用于明确存储设备或分区上的文件的方法。 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。法和数据结构;即在存储设备上组织文件的方法。 文件系统分类: Linux文件系统:ext2 ext3 ext4 xfs btrfs vfat jfs等 光盘:iso9660 Windows:fat32 ntfs Unix:FFS UFS JFS2 网络文件系统:NFS CIFS 集群文件系统:GFS2 OCFS2 分布式文件系统:ceph moosefs mogilefs glusterfs lustre RAM:为经处理或者未经格式化产生的文件系统 虚拟文件系:VFS 查前支持的文件系统:cat /proc/filesystems
(2)文件系统管理
1)mkfs命令:创建文件系统
语法:
mkfs [选项] [-t <类型>] [文件系统选项] <设备> [<大小>]
选项:
-t, --type=<类型> 文件系统类型;若不指定,将使用 ext2 fs-options 实际文件系统构建程序的参数 <设备> 要使用设备的路径 <大小> 要使用设备上的块数 -V, --verbose 解释正在进行的操作; 多次指定 -V 将导致空运行(dry-run) -V, --version 显示版本信息并退出 将 -V 作为 --version 选项时必须是惟一选项 -h, --help 显示此帮助并退出 -c:在制做档案系统前,检查该partition是否有坏轨
2)mke2fs命令:ext系列文件系统专用管理工具
语法:create an ext2/ext3/ext4 filesystem
mke2fs [options] device
选项:
-t{ext2、ext3、ext4}:指明要创建的文件系统类型 -b{1024、2048、4096}:指明文件系统块大小 -L:LABEL指明卷标; mke2fs -t ext3 -L mydata -b 1024 /dev/sda3 -j:创建有日志功能的文件系统ext3,相当于 -t ext3 mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 =mkfs.ext3 -i # :bytes-per-inode ,指明inode与字节的比率,即每多少个字节创建一个inode,此大小不应该小于block 的大小 -N #:直接指明要给此文件系统创建的inode的数量 -I:一个inode记录的大小128---4096 -O[^]FEATURE:以指定的特性创建目标文件系统(加^表示关闭特性,不加表示启用特性) -m #:指定预留的空间,百分比(不用百分号)默认为5% -q:执行时不显示任何信息 -M:记录最后一次挂入的目录 -c;检查是否有损坏的区块
3)blkid命令:查看指定块设备的属性信息
语法:
blkid [OPTION]... [DEVICE]
选项:
-U UUID: 根据指定的UUID 来查找对应的设备 -L LABEL :根据指定的LABEL显示 对应设备
4)e2label命令:管理ext系列文件系统的LABEL
语法:
e2label DEVICE [LABEL] 查看:e2label devicd 设定:e2label device LABEL
示例:
设置/dev/sdb1的卷标为/mnt/sdb1 [root@localhost ~]# e2label /dev/sdb1 /mnt/sdb1 [root@localhost ~]# blkid /dev/sdb1 /dev/sdb1: LABEL="/mnt/sdb1" UUID="3659ccda-38fc-457c-a8a3-6e7fefb667ce" TYPE="ext2" 显示某设备的卷标 [root@localhost ~]# e2label /dev/sdb1 /mnt/sdb1 [root@localhost ~]# e2label /dev/sdb2 ## /dev/sdb2未设置卷标 [root@localhost ~]#
5)findfs命令:查找分区
依据卷标(Label)和UUID查找文件系统所对应的设备文件,findfs命令会搜索整个磁盘。
语法:
findfs [选项] LABEL=<label> findfs [选项] UUID=<uuid>
示例:
6)dumpe2fs命令:查看ext系列文件系统属性
语法:
dumpe2fs [options] device
选项:
-b:打印文件系统中预留的块信息; -ob<超级块>:指定检查文件系统时使用的超级块; -OB<块大小>:检查文件系统时使用的指定的块大小; -h:仅显示超级块信息; -i:从指定的文件系统映像文件中读取文件系统信息; -x:以16进制格式打印信息块成员。
示例:
[root@localhost ~]# dumpe2fs /dev/sdb dumpe2fs 1.42.9 (28-Dec-2013) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: 233296d6-20a9-4f10-82c0-d1519596bcee Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 1310720 Block count: 5242880 Reserved block count: 262144 Free blocks: 5149359 Free inodes: 1310709 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 1022 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8192 Inode blocks per group: 512 Filesystem created: Thu Aug 25 21:16:17 2016 Last mount time: n/a Last write time: Thu Aug 25 21:16:18 2016 Mount count: 0 Maximum mount count: -1 Last checked: Thu Aug 25 21:16:17 2016 Check interval: 0 (<none>) 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: 67c67387-a85d-4a7b-a1a0-e91526517420 Group 0: (Blocks 0-32767) 主 superblock at 0, Group descriptors at 1-2 保留的GDT块位于 3-1024 Block bitmap at 1025 (+1025), Inode bitmap at 1026 (+1026) Inode表位于 1027-1538 (+1027) 31223 free blocks, 8181 free inodes, 2 directories 可用块数: 1545-32767 可用inode数: 12-8192 ...(N个块组)
7)tune2fs命令:重新设定ext系列文件系统可调整参数的值
注意:块设备块大小无法修改
语法:
tune2fs [options] device
选项:
-c:调整最大加载次数; -C:设置文件系统已经被加载的次数; -e:设置内核代码检测到错误时的行为; -f:强制执行修改,即使发生错误; -i:设置相邻两次文件系统检查的相隔时间; -j:为“ext2”文件系统添加日志功能,将其转换为“ext3”文件系统; -l:显示文件超级块内容; -L:设置文件系统卷标; -m:显示文件保留块的百分比; -M:设置文件系统最后被加载到的目录; -o:设置或清除文件系统加载的特性或选项;清除[^o] -O:设置或清除文件系统的特性或选项;清除[^O] -r:设置文件系统保留块的大小; -T:设置文件系统上次被检查的时间; -u:设置可以使用文件系统保留块的用户; -U:设置文件系统的UUID。
示例:
8)fsck命令:文件系统检测和修改的工具
语法:
fsck [options] device
选项:
-a:自动修复文件系统,不询问任何问题; -A:依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统; -N:不执行指令,仅列出实际执行会进行的动作; -P:当搭配"-A"参数使用时,则会同时检查所有的文件系统; -r:采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式; -R:当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查; -s:依序执行检查作业,而非同时执行; -t<文件系统类型>:指定要检查的文件系统类型; -T:执行fsck指令时,不显示标题信息; -V:显示指令执行过程。 -y:对所有问题自动回答为yes 注意:建议离线检测
9)e2fsck命令:ext系列文件系统的专用工具
e2fsck执行后的传回值及代表意义如下: 0 没有任何错误发生。 1 文件系统发生错误,并且已经修正。 2 文件系统发生错误,并且已经修正。 4 文件系统发生错误,但没有修正。 8 运作时发生错误。 16 使用的语法发生错误。 128 共享的函数库发生错误。
语法:
e2fsck [options] device
选项:
-a:不询问使用者意见,便自动修复文件系统; -b<superblock>:指定superblock,而不使用预设的superblock; -B<区块大小>:指定区块的大小,单位为字节; -c:一并执行badblocks,以标示损坏的区块; -C:将检查过程的信息完整记录在file descriptor中,使得整个检查过程都能完整监控; -d:显示排错信息; -f:即使文件系统没有错误迹象,仍强制地检查正确性; -F:执行前先清除设备的缓冲区; -l<文件>:将文件中指定的区块加到损坏区块列表; -L<文件>:先清除损坏区块列表,再将文件中指定的区块加到损坏区块列表。因此损坏区块列表的区块跟文件中指定的区块是一样的; -n:以只读模式开启文件系统,并采取非互动方式执行,所有的问题对话均设置以"no"回答; -p:不询问使用者意见,便自动修复文件系统; -r:此参数只为了兼容性而存在,并无实际作用; -s:如果文件系统的字节顺序不适当,就交换字节顺序,否则不做任何动作; -S:不管文件系统的字节顺序,一律交换字节顺序;、 -t:显示时间信息; -v:执行时显示详细的信息; -V:显示版本信息; -y:采取非互动方式执行,所有的问题均设置以"yes"回答。
10)超级块
超级块的作用是存储文件系统的大小、有多少是空的和已经填满的占多少,以及它们各自的总数和其他信息。超级块占用第一号物理块,应该做好备份。
5、挂载文件系统
挂载: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为 卸载:为解除此关联关系的过程 挂载点下原有文件在挂载完成后会被临时隐藏,挂载点目录一般为空,且要事先存在
mount命令:挂载
语法:
mount [-fnrsvw] [-t vfstype] [-o options] device(设备) dir(挂载点)
选项:
-t vsftype :指定要挂载的设备上的文件系统类型 -r: readonly ,只读挂载 -w: read and write, 读写挂载 -n: 不更新/etc/mtab ,相当于#mount -a :自动挂载所有支持自动挂载的设备( 定义在了/etc/fstab文件中,且挂载选项中有auto 功能) -L 'LABEL': 以卷标指定挂载设备 -U 'UUID': 以UUID 指定要挂载的设备 -B, --bind: 可以实现将目录绑定至另一个目录上,作为其临时访问入口 mount --bind 源目录 目标目录 查看内核追踪到的已挂载的所有设备:cat /proc/mounts
-o选项的后接选项:
sync/async:同步/异步操作 atime/noatime:文件或目录被读取访问时是否更新最近一次访问时间戳 diratime/nodiratime:目录在被访问时是否更新其最近一次访问时间戳 remount:重新挂载 acl:支持使用facl功能,默认不支持 mount -o remount,acl /dev/sda3 /mnt tune2fs -o acl device dev/nodev :此设备上是否允许创建设备文件 exec/noexec:是否允许运行此设备上的程序文件 auto/noauto:是否允许自动挂载 user/nouser:是否允许普通用户挂载此文件系统 suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效 ro:只读 rw:读写
查看当前系统所有已经挂载的设备
1)mount 2)cat /etc/mtab文件中,-n就是禁止此特性 3)cat /proc/mounts 4)findmnt MOUNT_POINT
查看正在访问指定文件系统的进程
lsof MOUNT_POINT fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT
卸载:umount命令
umount DEVICE umount MOUNT_POINT
示例:
原创文章,作者:pao,如若转载,请注明出处:http://www.178linux.com/42114