Linux系统——硬盘操作
一、硬盘、分区简介
1、硬盘的表示方法
/dev/sda
a: 第1块硬盘,依次类推
sd:硬盘接口, SAS/SATA接口
-
硬盘类型:
机械硬盘 转速 RPM 5400/7200/10000/120000RPM
SSD固态硬盘 -
数据块 block,默认每个块4K
数据存储时会被转换成数据块、随机存储
[root@martin-host ~]# du -h /opt/file01
4.0K /opt/file01
- 查看块设备
[root@martin-host ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 800M 0 part /boot
└─sda2 8:2 0 19.2G 0 part
├─centos-root 253:0 0 18.2G 0 lvm /
└─centos-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─db-redis 253:2 0 5G 0 lvm
sr0 11:0 1 9.5G 0 rom
2、硬盘分区
方便分类存储数据
系统盘:至少得有1个主分区
数据盘:无所谓
-
主分区
最多创建4个 -
扩展分区
方便创建逻辑分区,最多只能有1个; 主分区 + 扩展分区 <= 4 -
逻辑分区
无数量限制 -
分区的表示方法
/dev/sdc1–4, 表示主分区、扩展分区
/dev/sdc5 表示逻辑分区
3、常见的文件系统
-
Windows
NTFS、fat32(淘汰) -
Linux
xfs、ext4
4、磁盘挂载
二、MBR格式硬盘操作命令
1、查看硬盘
[root@martin-host ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 800M 0 part /boot
└─sda2 8:2 0 19.2G 0 part
├─centos-root 253:0 0 18.2G 0 lvm /
└─centos-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─db-redis 253:2 0 5G 0 lvm
sdc 8:32 0 8G 0 disk
sr0 11:0 1 9.5G 0 rom /run/media/root/CentOS 7 x86_64
[root@martin-host ~]# fdisk -l
磁盘 /dev/sdc:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c3b85
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 1640447 819200 83 Linux
/dev/sda2 1640448 41943039 20151296 8e Linux LVM
[root@martin-host ~]# fdisk -l /dev/sdc
磁盘 /dev/sdc:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
2、管理硬盘分区
# fdisk 硬盘名称
交互式工具:
n:新建分区
d:删除分区
p:显示分区
w:保存
q:退出
3、创建文件系统/格式化
# mkfs -t 文件系统 设备名称
# mkfs -t xfs /dev/sdc2
4、硬盘挂载
// 查看挂载的硬盘
[root@martin-host ~]# mount
// 挂载硬盘
[root@martin-host ~]# mount 设备名称 挂载点
[root@martin-host ~]# mount /dev/sdc2 /test1
// 卸载硬盘
[root@martin-host ~]# umount 挂载点
5、创建硬盘分区
需求: /dev/sdc
主分区 1G xfs 挂载点: /db/redis
主分区 1G xfs 挂载点: /db/pgsql
逻辑分区 200M ext4 挂载点: /db/oracle
- 创建硬盘分区
[root@martin-host ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x1801e6ea 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-16777215,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-16777215,默认为 16777215):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (2099200-16777215,默认为 2099200):
将使用默认值 2099200
Last 扇区, +扇区 or +size{K,M,G} (2099200-16777215,默认为 16777215):+1G
分区 2 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): e
分区号 (3,4,默认 3):3
起始 扇区 (4196352-16777215,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-16777215,默认为 16777215):
将使用默认值 16777215
分区 3 已设置为 Extended 类型,大小设为 6 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (4198400-16777215,默认为 4198400):
将使用默认值 4198400
Last 扇区, +扇区 or +size{K,M,G} (4198400-16777215,默认为 16777215):+200M
分区 5 已设置为 Linux 类型,大小设为 200 MiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdc:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x1801e6ea
设备 Boot Start End Blocks Id System
/dev/sdc1 2048 2099199 1048576 83 Linux
/dev/sdc2 2099200 4196351 1048576 83 Linux
/dev/sdc3 4196352 16777215 6290432 5 Extended
/dev/sdc5 4198400 4607999 204800 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
- 让内核识别硬盘分区的变化
[root@martin-host ~]# partprobe /dev/sdc
[root@martin-host ~]#
[root@martin-host ~]# lsblk | grep sdc
sdc 8:32 0 8G 0 disk
├─sdc1 8:33 0 1G 0 part
├─sdc2 8:34 0 1G 0 part
├─sdc3 8:35 0 1K 0 part
└─sdc5 8:37 0 200M 0 part
[root@martin-host ~]#
- 创建文件系统/格式化
[root@martin-host ~]# mkfs -t xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@martin-host ~]# mkfs -t xfs /dev/sdc2
meta-data=/dev/sdc2 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@martin-host ~]# mkfs -t ext4 /dev/sdc5
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33816576
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
- 查看文件系统
[root@martin-host ~]# blkid /dev/sdc1
/dev/sdc1: UUID="5aebd620-6289-4570-995e-712a1a487401" TYPE="xfs"
[root@martin-host ~]#
[root@martin-host ~]# blkid /dev/sdc2
/dev/sdc2: UUID="87b9a3ea-6b53-4a1f-b5e5-d2b7c2563430" TYPE="xfs"
[root@martin-host ~]#
[root@martin-host ~]# blkid /dev/sdc5
/dev/sdc5: UUID="747ca5fe-b2b8-4a34-aac2-3f6884657cb7" TYPE="ext4"
- 挂载使用
[root@martin-host ~]# mkdir -p /db/{redis,pgsql,oracle}
[root@martin-host ~]# mount /dev/sdc1 /db/redis
[root@martin-host ~]# mount /dev/sdc2 /db/pgsql
[root@martin-host ~]# mount /dev/sdc5 /db/oracle
[root@martin-host ~]# mount | grep "sdc"
/dev/sdc1 on /db/redis type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdc2 on /db/pgsql type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdc5 on /db/oracle type ext4 (rw,relatime,data=ordered)
- 查看硬盘的容量使用情况(已挂载)
[root@martin-host ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 894M 0 894M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 19G 8.8G 9.5G 49% /
/dev/sda1 xfs 797M 185M 612M 24% /boot
tmpfs tmpfs 182M 32K 182M 1% /run/user/0
/dev/sr0 iso9660 9.5G 9.5G 0 100% /run/media/root/CentOS 7 x86_64
/dev/sdc1 xfs 1014M 33M 982M 4% /db/redis
/dev/sdc2 xfs 1014M 33M 982M 4% /db/pgsql
/dev/sdc5 ext4 190M 1.6M 175M 1% /db/oracle
三、开机自动挂载
- 配置文件: /etc/fstab
文件格式:
设备名称/UUID 挂载点 文件系统 挂载参数(defaults) 0 0
第1个数字: 是否启用dump备份,0 不启用 1 启用
第2个数据: 系统开机时是否检测硬盘 0 不检测 1 优先检测 2 后续检测
[root@martin-host ~]# tail -n 3 /etc/fstab
/dev/sdc1 /db/redis xfs defaults 0 0
/dev/sdc2 /db/pgsql xfs defaults 0 0
UUID="747ca5fe-b2b8-4a34-aac2-3f6884657cb7" /db/oracle ext4 defaults 0 0
[root@martin-host ~]# mount -a
四、GPT格式硬盘分区操作
1、分区表类型
-
MBR
容量不能超过2T
分区表容量是固定64字节, 所以, 主+扩展<=4
分区工具: fdisk -
GPT
支持容量大于2T的硬盘
分区工具: parted
2、parted分区工具使用
[root@martin-host ~]# lsblk | grep sdd
sdd 8:48 0 4T 0 disk
// 指定分区表格式为gpt
[root@martin-host ~]# parted /dev/sdd mklabel gpt
信息: You may need to update /etc/fstab.
// 创建分区, parted 硬盘 mkpart 分区名称 起始大小 终止大小
[root@martin-host ~]# parted /dev/sdd mkpart p1 1 500G
信息: You may need to update /etc/fstab.
[root@martin-host ~]# parted /dev/sdd mkpart p2 500G 1000G
信息: You may need to update /etc/fstab.
[root@martin-host ~]# parted /dev/sdd mkpart p3 1000G 100%
信息: You may need to update /etc/fstab.
[root@martin-host ~]# partprobe /dev/sdd
[root@martin-host ~]#
[root@martin-host ~]# lsblk | grep sdd
sdd 8:48 0 4T 0 disk
├─sdd1 8:49 0 465.7G 0 part
├─sdd2 8:50 0 465.7G 0 part
└─sdd3 8:51 0 3.1T 0 part
[root@martin-host ~]# mkfs -t xfs /dev/sdd1
meta-data=/dev/sdd1 isize=512 agcount=4, agsize=30517504 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=122070016, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=59604, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@martin-host ~]# mkfs -t xfs /dev/sdd2
meta-data=/dev/sdd2 isize=512 agcount=4, agsize=30517568 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=122070272, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=59604, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@martin-host ~]# mkfs -t xfs /dev/sdd3
[root@martin-host ~]# mkdir /web/{nginx,tomcat,httpd} -p
[root@martin-host ~]# tail -n 3 /etc/fstab
/dev/sdd1 /web/nginx xfs defaults 0 0
/dev/sdd2 /web/tomcat xfs defaults 0 0
/dev/sdd3 /web/httpd xfs defaults 0 0
[root@martin-host ~]# mount -a
[root@martin-host ~]# df -hT | grep "sdd"
/dev/sdd1 xfs 466G 33M 466G 1% /web/nginx
/dev/sdd2 xfs 466G 33M 466G 1% /web/tomcat
/dev/sdd3 xfs 3.1T 33M 3.1T 1% /web/httpd
五、inode / i节点
限制硬盘容量的因素:
容量、inode(文件个数)
// 查看inode
[root@martin-host ~]# df -i /db/oracle/
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdc5 51200 10 51190 1% /db/oracle
[root@martin-host ~]# for i in $(seq 51190)
> do
> touch /db/oracle/file00$i
> done
[root@martin-host ~]# df -i /db/oracle/
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdc5 51200 51200 0 100% /db/oracle
[root@martin-host ~]# df -hT /db/oracle/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sdc5 ext4 190M 3.0M 173M 2% /db/oracle
[root@martin-host ~]# touch /db/oracle/hahah
touch: 无法创建"/db/oracle/hahah": 设备上没有空间
- 查看元数据
[root@martin-host ~]# stat /etc/fstab
文件:"/etc/fstab"
大小:780 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:19521396 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2024-10-12 10:36:12.468011105 +0800
最近更改:2024-10-11 11:44:05.974089307 +0800
最近改动:2024-10-11 11:44:05.974089307 +0800
创建时间:-
六、dd命令
作用:拷贝数据
创建测试文件
[root@martin-host ~]# dd if=/dev/zero of=/web/httpd/file01 bs=800M count=200
记录了200+0 的读入
记录了200+0 的写出
167772160000字节(168 GB)已复制,130.277 秒,1.3 GB/秒
if= 源文件
of=目的文件
bs=容量
count=次数
- 毁系统
[root@martin-host ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1
记录了1+0 的读入
记录了1+0 的写出
446字节(446 B)已复制,0.00032372 秒,1.4 MB/秒