linux系统如何识别硬盘
硬盘类型:
按接口可划分为
并行
IDE
SCSI
串行
SATA
SAS
USB
对于linux来说,一切皆文件,磁盘也被当作文件。磁盘文件都存放于/dev/目录下。
设备文件的作用:关联至一个设备驱动程序,进而能够跟与之对应的设备进行通信。设备文件是设备的访问入口。
设备文件的文件名由ICANN(互联网名称地址分配机构)组织来定义
对IDE类型磁盘来说:使用/dev/hd[a-z]来标识
对SCSI、SATA、SAS、USB类型的磁盘来说:使用/dev/sd[a-z]来标识
每个设备都有一个设备号与之对应,设备号包括:
主设备号:major。用于区分不同的设备类型
次设备号:minor。用于标识同类型设备下的不同设备,是特定设备的访问入口。
从上图中可以看到,sdc的设备类型是sd,sdc1是sdc设备下的一个分区。
一、硬盘分区管理
硬盘买回来,插入服务器之后,要使用它,先得进行分区
那么,如何对硬盘进行分区呢?
先来了解下硬盘的分区方式:
分为MBR 和GPT两种方式。
1 MBR介绍:
MBR位于硬盘的0磁道0扇区,共512bytes。
512bytes中,
前446bytes表示:boot loader,起引导启动操作系统的程序。
之后的64bytes表示分区表,每16bytes标识一个分区,所以采用MBR分区的磁盘理论上只能划分为4个分区。
最后的2bytes表示硬盘有效标志,若其被破坏,也不能正确地识别硬盘分区信息。
为了能够充分利用磁盘,在使用mbr对磁盘分区时,一般都采用划分3个主分区+1个扩展分区(在扩展分区上,能进一步划分多个分区)的方式。如下图:
1.1 MBR分区的管理命令:fdisk
fdisk也可以管理gpt分区的磁盘,但其表现不够专业,gpt分区的管理工具为gdisk。在下文中会有介绍。
fdisk命令介绍:
fdisk -l [device] :查看
fdisk device:管理
常用命令:
n:创建分区
d:删除分区
t:修改分区类型
l:列出已知的分区类型
w:保存退出
q:不保存退出
m:查看帮助
注意:在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能无法在创建完成后无法直接识别;
查看分区信息:
1) cat /proc/partitons:只能查看内核已识别的分区信息
2) lsblk:也只能查看内核已识别的分区信息
lsblk –f:可以查看设备的文件系统及挂载点等信息
3) fdisk -l [device]:查看系统上实时的设备分区信息
通知内核强制读取磁盘分区表:
CentOS5:partprobe device
CentOS6:partx –a device
CentOS7:kpartx -af device
partx命令介绍:
新增分区:partx –a device
删除分区:partx –d–nr N|N-M device
N:为删除的分区的分区号
N-M:标识连续的多个分区
例1:在/dev/sdb磁盘上新建三个分区:大小分别为1G、5G、10G,创建完成后,通知内核读取最新的分区信息。
fdisk /dev/sdb
创建完成之后,执行partx –a /dev/sdb
通知内核读取分区表
使用lsblk命令可以查看到系统上磁盘的分区情况。
2 GPT分区:GUID(Globals Unique Identifies) Partition Table
GPT磁盘分区样式支持最大卷为18 EB(Exabytes),磁盘的分区数为128
2.1管理GPT分区:
往虚拟机新增一块20G大小的磁盘,将其分区格式指定为GPT,
parted /dev/sdc mklabel gpt
注:parted命令是实时操作的命令,即操作之后立即希尔内核,对于删除操作来说是非常危险的,建议使用fdisk或gdisk来删除
之后使用gdisk对磁盘进行分区管理;在CentOS6上,要使用需要先安装gdisk软件。
yum install -y gdisk
安装完成之后,使用
gdisk /dev/sdc
?:获取帮助信息
c:修改分区名
d:删除分区信息
l:查看分区类型
n:新增分区
q:不保存退出
t:修改分区类型
w:保存退出
新建一个10G大小的分区。
查看分区信息:
3 MBR和GPT的区别
MBR(Master Boot Record)主引导记录,是传统的分区机制,应用于绝大多数使用BIOS的PC设备
1、MBR支持32位和64位系统
2、MBR支持分区数量有限
3、MBR只支持不超过2T的硬盘,超过2T的硬盘将只能用2T空间(有第三方解决方法)
GPT(GUID Partition Table)全局唯一标识分区表,是一个较新的分区机制,解决了MBR很多缺点
1、支持超过2T的磁盘(64位寻址空间)。fdisk最大只能建立2TB大小的分区,创建一个大于2TB的分区可以使用parted和gdisk
2、向后兼容MBR
3、必须在支持uEFI的硬件上才能使用(Intel提出,用于取代BIOS)
4、必须使用64位系统
5、Mac、Linux系统都能支持GPT分区格式
6、Windows 7/8 64bit、Windows Server 2008 64bit支持GPT
二、在硬盘上创建文件系统
linux上文件系统介绍:
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
linux文件系统类型:
无日志功能:ext2
有日志功能:
ext3
ext4
xfs
btrfs
swap
日志功能介绍:用户对文件进行写操作时,修改的数据并不是立即写入硬盘中,而是先缓存在内存中,过一段时间之后,在讲数据写入到硬盘中。在写入硬盘的过程的,若发生断电等故障,则会导致文件被损坏,数据不能正常使用。为了应对这种情况,日志型文件系统将数据写入硬盘之前,会先将数据写入到日志之中,之后再同步到硬盘上,在这个过程中,如果系统发生断电等异常情况,写入过程被迫终止,在下一次系统启动的过程中,系统会比对日志中的文件,将未写入的数据恢复到文件中,从而实现文件修复,有效地保证了数据的完整性和安全性。
光盘:iso9660
网络文件系统:NFS、CIFS
集群文件系统:GFS2,OCFS2
分布式文件系统:ceph,mosefs,mogilefs,glusterfs,lustre
可以看到,linux自身有多个文件系统,也支持其他的多种文件系统,为了方便对个文件系统的管理,方便系统管理员和程序开发者更高效地完成工作,linux提供了一个虚拟的文件系统,叫做Virtual Fils System,简称为VFS。
在VFS的基础上,我们可以完成文件系统的创建,修改等管理操作。
2.1 如何创建文件系统。
1) mkfs 命令
用法:mkfs.Fs_Type device
Fs_Type有:ext2,ext3,ext4,xfs
mkfs.Fs_Type = mkfs –t Fs_Type
mkfs的常用选项
-L ‘Label_Name’:指定卷标名。
在CentOS6系列系统上要使用xfs文件系统,需要安装xfsprogs软件
yum install -y xfsprogs
之后才可正常使用。
例2:将例1中的sdb1格式化成ext3、sdb2格式化成ext4、sdb3格式化成xfs。
通过lsblk –f /dev/sdb可以查看到sdb硬盘上三个分区都已经创建了不同的文件类型。
ext系列文件系统专用的创建工具:mke2fs
mke2fs命令介绍:
mke2fs [options] device
常用option:
-t{ext2,3,4}:指明创建的文件系统类型
mkfs.ext4 = mkfs -t ext4 =mke2fs -t ext4
-b {1024,2048,4096}:指定块大小,默认4096.若要创建的文件系统用于存放较小的文件,建议使用较小的块大小
注意:块大小创建后不能修改
-L Label:指定卷标
例:mke2fs -t ext4 -b 1024 -L zmingbo /dev/sdb3
-j:创建有日志功能的文件系统,用于ext2文件系统
-i #:指定多少个bytes准备一个inode;此大小不应该小于block 的大小
-N #:指定给此文件系统创建的inode数;
-I #: 一个inode 记录大小(128—4096)
-O [^]Feature:以指定的特性创建目标文件系统
加上[^]表示关闭特性,反之则表示启用特性
-m #:指定为管理员预留的管理空间百分比;默认为5%,当分区较大时,此比例会造成磁盘空间浪费
例:在sdb硬盘上新建一个扩展分区,在此基础上创建两个分区,大小分别为1G、2G。
在创建扩展分区选择起始柱面和结束柱面时,直接enter键选择默认值,就会把剩余的空间都分配给该分区。
硬盘分区之后,在sdb5创建为ext2类型,块大小为1024,每1024bytes指定一个inode,指定卷标为“HardStudy“,管理员预留百分比为1,指定创建日志功能
ext2是没有日志功能的,当我们指定sdb5支持日志功能时,通过blkid /dev/sdb5可以查看到该分区的文件类型为ext3。
三、文件系统的查看和管理
磁盘分区了,在分区上也创建文件系统了,那么创建完成的文件系统如何进行查看和修改呢
对于ext系列的文件系统来说,同样有专门的工具用于查看和设定:
e2label: 用于ext系列文件系统的卷标的查看与设定
查看:e2label device
设定:e2label device Label_name
dumpe2fs:显示ext系列文件系统的属性信息
dumpe2fs [-h] device
tune2fs:查看或修改ext系列文件系统的某些属性
tune2fs [option] device
-l:查看超级块信息
修改指定文件系统的特性
-j:将ext2文件系统升级为ext3
-L Label:设定或修改卷标
-m #:调整预留空间百分比
-O [^]Feature:调整文件系统特性,启用或关闭
-o [^]mount_options:开启或关闭某种默认挂载选项,使用逗号隔开多个选项
acl
^acl
[root@localhost /mnt/mount]# tune2fs -l /dev/sdb5 tune2fs 1.41.12 (17-May-2010) Filesystem volume name: HardStudy #卷标名 Last mounted on: <not available>#最近的挂载点,因为该设备才格式化,所以无信息 Filesystem UUID: 8f21a52c-0c9f-4657-b105-e74610d8737d#设备的UUID Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype sparse_super #文件系统支持的特性,创建时刻指定,创建后也可修改 Filesystem flags: signed_directory_hash Default mount options: (none) #默认挂载点 Filesystem state: clean#文件系统状态。若为not clean状态,需要修复 Errors behavior: Continue Filesystem OS type: Linux Inode count: 1059760 #inode数量。 Block count: 1060256 #块数量 Reserved block count: 10602 #管理员预留硬盘空间 Free blocks: 759262 #剩余块数量 Free inodes: 1059749 #剩余inode数量 First block: 1 #起始块 Block size: 1024 #结束块 Fragment size: 1024 #块大小。 Reserved GDT blocks: 256 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 8152 Inode blocks per group: 2038 Filesystem created: Fri Aug 26 10:35:05 2016#文件系统创建时间 Last mount time: n/a #最近一次挂载时间 Last write time: Fri Aug 26 10:35:10 2016 #最近一次写时间 Mount count: 0 #设备被挂载的次数,共计 Maximum mount count: 28 #最大挂载数,当达到此数时,会自动触发设备检查的操作 Last checked: Fri Aug 26 10:35:05 2016#上一次检查时间 Check interval: 15552000 (6 months) #检查周期,每6个月 Next check after: Wed Feb 22 10:35:05 2017#下一次检查时间 Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 #inode大小,可指定 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: 79b04935-292f-4308-b59e-d4985fe55a31 Journal backup: inode blocks
例:去掉此设备的日志特性。调整预留空间百分比为0.1(系统支持的最小值),修改卷标名为“ForTest”,
tune2fs -O ^has_journal -m 0.1 -L "ForTest" /dev/sdb5
没有日志功能的ext3文件系统会降级为ext2文件系统。
用于实现文件系统检查的工具。
因进程意外终止或系统崩溃等原因导致定稿操作非正常终止,可能会造成文件损坏;此时应该检测并修复文件系统;建议,此操作离线进行,即umount之后,在检测。
ext系列专用的文件检测工具:
e2fsck [options] device
-f:即便文件系统处于clean状态,也要强制进行检测
-y:对所有问题自动回答yes。
fsck :
fsck [options] device
-t fstype:指明文件系统类型
-a :无需交互而自动修复所有错误
-f:交互式修复
四、挂载使用硬盘设备
在硬盘上创建文件系统之后。要使用该设备,还需要挂载。
文件系统的使用:
首先要“挂载”:mount 命令和 umount (卸载)命令
根文件系统之外的其他文件系统要想能够被访问,必须通过关联至根文件系统上的某个目录来实现,此关联操作即为挂载,该目录即为挂载点。
挂载点;mount_point,用作另一个文件系统的访问入口。
mount 命令:
mount [-nrw] [-t vfstype] [-o options] device dir
命令选项:
-r (readonly):只读挂载
-w(read & write):读写挂载
-n :默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab中,-n禁用词性
-t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid 来判断要挂载的设备的文件系统
-L Label :挂载时以卷标的方式指明设备
mount -L Label dir
-U UUID:挂载时以UUID的方式指明设备
mount -U UUID dir
-o options:
sync/async :同步/异步操作
atime/noatim:文件或目录在被访问时是否更新其访问时间戳
diratime/dirnoatime:目录在被访问时是否更新其时间戳
remount: 更新挂载
acl :支持使用facl功能
ro :只读
rw :读写
/dev/nodev :此设备上是否允许创建设备文件
exec/noexec:是否允许运行此设备上的程序文件
auto/noauto
user/nouser: 是否允许普通用户挂载此文件系统
suid/nosuid :是否允许程序文件上的suid和sgid特许权限生效
defaults: rw,suid,dev,exec,auto,nouser,async,and relatime
使用技巧:
可以实现将目录绑定至另一个目录上,作为其临时访问入口
mount –bind|-B 源目录 目标目录
例:将sdb2挂载到/mnt/mount/sdb2_point上
挂载之后,不允许运行此设备的还是那个的可执行文件,不让suid生效,访问文件时不更新文件的时间戳。可以在不卸载的情况下,执行remount操作。
umount 命令:
umount device|dir
注意:正在被进程访问的挂载点无法被卸载
如何查看被哪个或哪些进程占用
lfos mount_point
fuser -v mount_point
踢出占用用户
fuser -km mount_point
例:卸载掉sdb2
查看当前系统所有已挂载的设备
mount
cat /etc/mtab
cat /proc/mounts
挂载光盘
mount -r /dev/vdrom mount_point
交换分区的启用和禁用
创建交换分区
mkswap device
启用
swapon [options] [device]
-a :启用所有定义在/etc/fstab文件中的swap设备
禁用
swapoff
swapoff device
自动挂载
swapon -a
例:将/dev/sdb5设备类型转换为swap分区,并将其挂载
设定自动挂载
设定除根文件系统以外的其他文件系统能够开机时自动挂载:/etc/fstab
每行定义一个要挂载的文件系统及相关属性
6个字段
1)、要挂载的设备
设备文件
Label
UUID
伪文件系统
2)、挂载点
swap文件系统的挂载点为swap
3)、文件系统类型
4)、挂载选项
defaults: 使用默认的挂载选项
如果同时指明多个挂载选项,要用逗号","分开
5)、转储频率
0: 从不备份
1: 每天备份
2:每隔一天备份
6)、自检次序
0: 不自检
1: 首先自检,通常只能是根文件系统可用1
2: 次级自检
…
mount -a: 自动挂载定义在/etc/fstab中支持自动挂载的设备
注:在挂载通过扩展分区创建的逻辑分区时,若有3个逻辑分区,分别为sdb5、sdb6、sdb7,若sdb6被删除,则sdb7的磁盘号会自动变化为sdb6,这时,挂载的文件就不再是我们所需要的文件,为了避免这种情况,在挂载时,应尽量使用UUID来进行挂载。
例:1)将sdb2挂载到/mnt/mount/sdb2_point,并指定挂载选项为noexec,nosuid,noatime,以UUID的方式挂载,不备份,不自检
2)在前一个例子中,我们将sdb5的文件类型设置为swap,先在将其挂载方式改为通过配置文件自动挂载。
总结一下系统新增硬盘到使用的过程:
一、购买新硬盘,并将其接入系统。在生产环境中,硬盘一般都支持热插拔,即插入即可被系统识别到。在VMware虚拟环境中。需要执行命令让系统识别新增加的硬盘
命令如下:
CentOS6系列:echo "- – -" > /sys/class/scsi_host/host2/scan
CentOS7系列:echo "- – -" > /sys/class/scsi_host/host0/scan
二、对硬盘进行分区,分区方式两种,MBR和GPT。MBR最多支持2T的硬盘分区,GPT不受此限制,且GPT上没有扩展分区和逻辑分区的概念,GPT上的分区都是主分区
三、对硬盘进行格式化,格式化的过程就是创建文件系统的过程。文件系统创建之后,可查看和修改。
四、将设备挂载到目录上,需要指出的是,挂载的目录事先得创建,否则挂载不成功。挂载可通过mount挂载和修改/etc/fstab挂载。通过mount挂载的操作在系统重启后即被清除,若要永久有效,建议使用配置文件进行挂载。
五、文件系统修复,fsck和e2fsck
原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/40871
评论列表(2条)
文章内容完整,思路清晰,有自己的思考与总结,整篇博客还是能让人看到很多专业性所在,还能看出很用心的地方,革命尚未成功,同志仍需努力啊,加油!
路漫漫其修远兮,吾将上下而求索。
谢谢老师的鼓励