目录
磁盘的组成
在正式开始前先来带大家认识一下磁盘的组成以及分区
首先说明一下磁盘的物理组成,整块磁盘的组成主要是有以下几项
1.圆形的碟片(主要记录数据)
2.机械手臂,还有机械手臂上的磁头(可擦写碟片上的数据)
3.主轴马达,转动碟片(有些磁盘的机械手臂也会转)主轴马达的主要作用就是让机械手臂的磁头读写数据(它会转动盘片到磁头的地方)
数据存储于读取的重点就是在于碟片
碟片物理组成
- 扇区 它是最小的物理存储单位,依据磁盘设计的不同,目前主要就是512B以及4KB这两种格式
- 柱面 通俗点来讲,就是讲扇区组成了一个圆
- 以前的分区都是以柱面为最小分区单位,但现在 大人时代变了 现在的分区通常都是用扇区为最小的分区单位(并且每个扇区都有自己的号码,就跟身份证一样的概念)
- 磁盘分区表现在主要就是两种格式,一种是限制比较多的MBR分区表,还有一种是比较新而且限制比MBR要少的GPT分区表
- MBR分区表中,第一个扇区是最重要的,里面存有主引导系统,以及分区表,在这里MBR的占有446B,分区表占有的是64B(还有一点就是后面会讲到的磁盘分区的问题,MBR不可以分2T以上的磁盘,也不是说不能分,容易出问题,而且在Linux里面最多分4个区)
- GPT分区表,与MBR相比除了分区数量扩充较多之外,支持的磁盘容量也可以超过2TB
文件系统的特性
我们大家都知道磁盘分区完毕后还要格式化之后操作系统才能得以使用,就像大家熟知的win系统,是否新电脑刚到都需要格式化之后才可以正常使用,那么这里为什么要格式化才可以使用呢。
这里就要提到一个东西,那就是文件属性/权限
举个例子来讲
windos98以前的操作系统主要使用的文件系统就是FAT或者是FAT16,而windos2000以后的版本开始有了所谓的NTFS系统(现在的windows系统基本都是默认的NTFS文件系统)
而linux的正统文件系统就是ext2,但现在ext2也不常见了ext4要多一点。另外这里还有一点就是windows的操作系统并不支持Linux的ext2文件系统
- 在传统的磁盘以及文件系统的应用中,一个分区只能格式化成为一个文件系统,所以在这里也可以说一个文件系统就是一个硬盘分区。但现在有新的技术出来了,比如我们比较耳熟的LVM还有软件磁盘阵列。
- 这些技术可以将一个分区格式化为多个文件系统,也可以将多个分区合成一个文件系统(还是蛮6的,刚接触这种技术的时候还是有点小震撼的)
目前我们在格式化时已经不再说成是针对硬盘分区来格式化,现在通常都会称呼一个可被挂载的数据为一个文件系统而不是分区
inode
既然讲到了文件系统,那么我们这里再来引入一个知识点
文件系统通常会将文件权限以及文件属性分别存放在不同的区块,权限与属性放置到inode中,实际数据则是放置到数据块中 ,此外还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与数据块的总量,使用量,剩余量等
每个inode与区块都有编号,下面这个三个数据的意义我在这边简略的说一下
- 超级区块:记录此文件系统的整体信息,包括inode与数据区块的总量,使用量,剩余量,还有文件系统的格式与相关信息等等
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据块所在的区块号码
- 数据区块:实际记录文件的内容,若文件太大时,可能会占用多个区块
这里给大家看一下如何去查文件系统的格式与相关信息
[root@localhost ~]# sudo dumpe2fs -bfhixV
dumpe2fs 1.42.9 (28-Dec-2013)
使用 EXT2FS Library version 1.42.9
[root@localhost ~]#
在这里我们可以看到很明了的文件系统信息
再给大家看一下inode号如何查询
[root@localhost ~]# stat 123.txt
文件:"123.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:100663378 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
上面的代码中我们可以看到这些命令会显示具体的文件信息还可以查看文件的权限等等以及修改时间,我个人觉得这些命令还是有点用的
磁盘的分区
接下来开始实战环节,我们来看一下如何给磁盘分区以及挂载等等
这里需要注意的是
:MBR分区表用fdisk分区,GPT分区使用gdisk分区
[root@localhost ~]# lsblk (这个命令的作用就是列出所有存储设备)
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 79G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 25.1G 0 lvm /home
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 5G 0 part /data
sdc 8:32 0 100G 0 disk
sr0 11:0 1 4.4G 0 rom
我此次要进行磁盘分区的设备是sdc,在这里我们可以看到该磁盘是100G,那么我们在这里用fidskj即可(没有超过2T)
[root@localhost ~]# fdisk /dev/sdc (dev是存储所有外部设备的目录,sdc就在dev目录下)
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x76b7ca45 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):n (在这里输入n的意思就是创建分区)
Partition type:
p primary (0 primary, 0 extended, 4 free) (主分区)
e extended (扩展分区)
Select (default p): p (我这边在这里选择的是p 也就是主分区)
分区号 (1-4,默认 1):
起始 扇区 (2048-209715199,默认为 2048): 这边的信息直接回车即可 默认就好 也可以自己改
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):+30G (创建一个30G的分区)
分区 1 已设置为 Linux 类型,大小设为 30 GiB (到了这里就是已经分好了 30个G已经分出来了)
命令(输入 m 获取帮助): (在这一行中我们输入w,保存的意思)
这一步命令打完就已经创建了好分区哈 我们接着往下面来看
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 79G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 25.1G 0 lvm /home
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 5G 0 part /data
sdc 8:32 0 100G 0 disk
└─sdc1(在这里可以看到我们是不是已经创建出来了一个30G的分区) 8:33 0 30G 0 part
sr0 11:0 1 4.4G 0 rom
那么到了这里是已经创建完毕了么? 当然没有 我们知道linux里所有的设备是不是都需要挂载到目录才可以正常使用?在挂载之前我们先来给这块硬盘设置好文件系统
[root@localhost ~]# mkfs.xfs /dev/sdc1 格式化为xfs文件系统 +(设备路径)
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=1966080 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=7864320, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=3840, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
在这里根据系统所反馈回来的信息,已经格式化完成了并且文件系统已经创建
现在我们来挂载
[root@localhost /]# mount /dev/sdc1 /sdc
(这里我是在根目录里面创建了一个sdc的目录 通过df -h 这个命令我们可以看到已经挂载完成了)
[root@localhost /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 16G 35G 32% /
/dev/sdb1 5.0G 33M 5.0G 1% /data
/dev/sda1 1014M 185M 830M 19% /boot
/dev/mapper/centos-home 26G 37M 26G 1% /home
tmpfs 378M 12K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
/dev/sdc1 30G 33M 30G 1% /sdc
到了这里我们就已经完成了挂载
但是还没有结束,因为这种挂载是临时的,只要你重启,这个挂载就会失效
现在我们来看看如何设置为永久挂载
[root@localhost /]# blkid /dev/sdc1
/dev/sdc1: UUID="1713374b-5000-4046-9328-b46d8860e503" TYPE="xfs"
上面的命令是查看硬盘UID号 还有文件系统
这里我们已经得到了UID号 ,现在我们通过去改配置文件来达到一个永久挂载的效果
[root@localhost /]# vi /etc/fstab
UUID="1713374b-5000-4046-9328-b46d8860e503" /sdc xfs defaults 0 0
再进入到这个配置文件后,我们将UID号添加最后一行 结束保存即可
这里的xfs就是文件系统
defaults 默认,默认拥有所有权限。
第一个0:不备份
第二个0:系统启动时,不检查文件系统
最后一步,我们来验证一下是否已经是永久挂载
mount -a:将 /etc/fstab 中定义的所有档案系统挂上
[root@localhost /]# mount -a
[root@localhost /]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 16G 35G 32% /
/dev/sdb1 5.0G 33M 5.0G 1% /data
/dev/sda1 1014M 185M 830M 19% /boot
/dev/mapper/centos-home 26G 37M 26G 1% /home
tmpfs 378M 12K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
/dev/sdc1 30G 33M 30G 1% /sdc
可以看到sdc1还是在的,这里就可以确定已经设置为永久挂载了
到了这里就结束了,后面我会继续更新其他的一些linux命令