磁盘管理(1)

1、磁盘结构(机械硬盘)

(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):主引导记录

磁盘管理(1)

一般将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):全局唯一标识符分区表

磁盘管理(1)

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等等

磁盘管理(1)

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是否有坏轨

磁盘管理(1)

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;检查是否有损坏的区块

磁盘管理(1)

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>

示例:

磁盘管理(1)

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。

示例:

磁盘管理(1)

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)超级块

超级块的作用是存储文件系统的大小、有多少是空的和已经填满的占多少,以及它们各自的总数和其他信息。超级块占用第一号物理块,应该做好备份。

磁盘管理(1)

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

示例: 磁盘管理(1)

原创文章,作者:pao,如若转载,请注明出处:http://www.178linux.com/42114

(0)
上一篇 2016-08-30 13:55
下一篇 2016-08-30 13:55

相关推荐

  • 搭建SSH服务器

    Linux 远程登录服务:sshSSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的安全性。SSH提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据的。不同的是,口令用户验证方式传输的是用户的账户名和密码,这要求输入的…

    Linux干货 2017-07-24
  • 常见RAID级别

    什么是RAID?     独立磁盘冗余阵列(RAID,Redundant Arrary of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Arrary of Inexpensive Disks),简称磁盘阵列。基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、…

    Linux干货 2016-05-29
  • shell编程之循环及函数

    for 循环 for 变量名 in 列表;do    循环体 done   执行机制: 依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中 的元素耗尽,循环结束   列表生成方式: (1)直接给出列表 (2)整数列表: (a) {start..end} (b) $(seq [start [s…

    Linux干货 2016-08-24
  • bash脚本编程之数组、高级字符串处理、高级变量操作、用户环境配置

    概述:     承接之前脚本编程部分,本篇将介绍一下脚本编程基础语法的最后一部分内容,具体分为:         1、数组简介         2、高级字符串处…

    Linux干货 2016-08-24
  • MAN手册各章节功能介绍及快捷键键位整理

       初学linux ,请教别人的时候,遇到人不耐烦回答我等菜菜的问题,都会说一句,“自己去man”,“翻过man了吗,再来问吧”,哦,my gd,这个man到底是何方超人啊,其实man就是linux自带的文档,假如你不知道ls这个命令的用法,你可以试着敲入 man  ls  ,然后来看看,会有啥结果。效果不错吧,一般…

    Linux干货 2016-10-18