Linux磁盘与文件系统管理

ooouuuooouuu 2020-07-19

本篇主要讲述:
1 磁盘挂载
2 磁盘管理
3 LVM逻辑卷的使用
4 交换分区swap(虚拟内存)
5 RAID
 
1、磁盘挂载操作
1.1 含义
将光盘,U盘,分区,网络存储等设备装到某个Linux目录。
各种命令工具通过访问Linux目录来操作这些设备。
访问光盘的内容
Windows:
光盘文件------->光驱设备------->CD驱动器(图标)
访问点(挂载点): 访问设备内容需要通过访问点  
Linux:
光盘文件------->光驱设备-------------->目录(/dvd)
/dev/sr0     #光驱的设备名称
/dev/hdc   
[ ~]# ls -l /dev/cdrom                    #光驱设备的快捷方式
lrwxrwxrwx. 1 root root 3 May 17 05:49 /dev/cdrom -> sr0
[ ~]# mkdir /dvd
[ ~]# mount /dev/cdrom /dvd/     #提供设备的访问点
mount: /dev/sr0 is write-protected, mounting read-only
[ ~]# ls /dvd/
addons  EULA  images    LiveOS      Packages       repodata                 RPM-GPG-KEY-redhat-release
EFI     GPL   isolinux  media.repo  release-notes  RPM-GPG-KEY-redhat-beta  TRANS.TBL
[ ~]# umount /dvd/   #卸载
 
1.2 实现开机自挂载
在/etc/fstab文件内设置
[ ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Apr 12 16:21:56 2020
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root   /                       xfs     defaults        1 1
UUID=8593eb92-1b71-4f9f-9baf-cbed97462e78 /boot                   xfs     defaults        1 2
/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
文件内挂载参数说明:设备/UUID   挂载点   挂载的文件系统类型    设置挂载的参数   dump是否备份   fsck磁盘检查
文件系统类型:ext2,ext3,ext4,xfs...
挂载的参数分类如下:
auto: 系统自动挂载,fstab默认就是这个选项
defaults: rw, suid, dev, exec, auto, nouser, and async.
noauto 开机不自动挂载
nouser 只有超级用户可以挂载
ro 按只读权限挂载
rw 按可读可写权限挂载
user 任何用户都可以挂载
请注意光驱和软驱只有在装有介质时才可以进行挂载,因此它是noauto
dump备份设置:
其值设置为1时,允许备份;设置为0时,忽略备份
开机是否fsck磁盘检查:
其值设置为1时,开机进行检查;设置为0时,不进行检查。

2、磁盘管理

磁道:track
扇区:sector  每个扇区,512字节
磁头:head
柱面:cylinde
2.1 MBR/msdos 分区模式
– 1~4个主分区,或者 0~3个主分区+1个扩展分区(n个逻辑分区)
– 最大支持容量为 2.2TB 的磁盘
– 扩展分区不能格式化
识别硬盘 => 分区规划 => 格式化 => 挂载使用
2.2 查看磁盘lsblk
[ ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0             2:0    1    4K  0 disk
sda             8:0    0    5G  0 disk
├─sda1          8:1    0  500M  0 part /boot
└─sda2          8:2    0  4.5G  0 part
  ├─rhel-root 253:0    0    4G  0 lvm  /
  └─rhel-swap 253:1    0  512M  0 lvm  [SWAP]
sdb             8:16   0    5G  0 disk
sr0            11:0    1  3.5G  0 rom
2.3 修改硬盘的分区表
使用fdisk 命令(分区格式为MBR)
使用gdisk命令(分区格式为GPT)
常用交互指令:
m 列出指令帮助
p 查看现有的分区表
n 新建分区
d 删除分区
q 放弃更改并退出
w 保存更改并退出
[ ~]# fdisk   /dev/vdb
n 创建新的分区----->回车----->回车---->回车----->在last结束时 +2G
p 查看分区表
n 创建新的分区----->回车----->回车---->回车----->在last结束时 +2G
d 删除分区
w 保存并退出
 
2.4 格式化文件系统
mkfd工具集
mkfs.ext3  分区设备路径
mkfs.ext4  分区设备路径
mkfs.xfs   分区设备路径
mkfs.vfat  分区设备路径
[ ~]# mkfs.xfs /dev/vdb1
[ ~]# mkfs.ext4 /dev/vdb2
2.5 查看分区文件系统
blkid 
[ ~]# blkid
/dev/sda1: UUid="8593eb92-1b71-4f9f-9baf-cbed97462e78" TYPE="xfs"
/dev/sda2: UUid="UizqW3-bEOH-iNXT-q4c1-xfua-TTwK-FJiOMk" TYPE="LVM2_member"
/dev/sr0: UUid="2014-05-07-03-58-46-00" LABEL="RHEL-7.0 Server.x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/rhel-root: UUid="6ebb5d4b-51dd-4d9b-85b8-78b7aed37d30" TYPE="xfs"
/dev/mapper/rhel-swap: UUid="43f548d3-1ea3-4d8d-9cec-f90aef868ca1" TYPE="swap"
[ ~]# blkid /dev/vdb1
[ ~]# blkid /dev/vdb2
挂载使用
[ ~]# mkdir /part1
[ ~]# mkdir /part2
[ ~]# mount /dev/vdb1 /part1
[ ~]# mount /dev/vdb2 /part2
2.6 查看正在挂载使用的设备信息
[ ~]# df  -h
缓解根分区的压力
[ ~]# find  -size  查找较大的目录有哪些
[ ~]#  还分新的分区 /dev/vdc1
[ ~]#  mount /dev/vdc1   /mnt
[ ~]#  cp -r /home/*    /mnt
[ ~]#  rm -rf /home/*
[ ~]#  umount /mnt
[ ~]#  mount /dev/vdc1   /home
将虚拟机server重起
[ ~]# reboot
 

3、LVM逻辑卷的使用(logicl volume)

1)整合分散的空间
2)实现分区的动态扩大与缩减
在“分区 --> 格式化”中间增加的一个逻辑层
–零散空闲存储 ---- 整合的虚拟磁盘 ---- 虚拟的分区----- 格式化------ 挂载
物理卷:Physical Volume
卷组:Volume Group
逻辑卷:Logical Volume
将众多的物理卷,组成卷组,再从卷组中划分逻辑卷
综合分区
将/dev/vdc划分6个分区,3个主分区,一个扩展分区,2个逻辑分区
[ ~]# fdisk   /dev/vdc
n 创建新的分区----->回车----->回车---->回车----->在last结束时 +10G
n 创建新的分区----->回车----->回车---->回车----->在last结束时 +10G
n 创建新的分区----->回车----->回车---->回车----->在last结束时 +10G
p 查看分区表
n 创建新的分区
 ----->回车---->起始回车----->结束回车  将所有空间给扩展分区
p 查看分区表
n 创建新的分区----->起始回车------>结束+10G
n 创建新的分区----->起始回车------>结束+10G
wq 保存并退出
[ ~]# partprobe         #刷新分区表
[ ~]# ls /dev/vdc[1-6]
[ ~]# lsblk
[ ~]# ls /dev/vdc*
3.1 新建逻辑卷
1)新建卷组
命令格式:vgcreate  卷组名称   分区路径
[ ~]# vgcreate  myvg  /dev/vdc1  /dev/vdc2
[ ~]# vgs
[ ~]# pvs    #查看卷组
2)创建逻辑卷
命令格式:lvcreate  -n  逻辑卷名称  -L 大小  基于卷组
[ ~]# lvcreate  -n  mylv  -L 16G   myvg
[ ~]# lvs    #查看逻辑卷
3)使用LVM逻辑卷
[ ~]# mkfs.ext4 /dev/myvg/mylv   #格式化
[ ~]# mkdir /lvm
vim /etc/fstab                                    #开机自挂载
路径   挂载点 格式  defaults  0  0
[ ~]# mount -a
[ ~]# df -h
 
3.2 LVM逻辑卷的扩展
(1)卷组有足够的剩余空间
a.直接扩展逻辑卷的空间
[ ~]# vgs
[ ~]# lvextend  -L  19G  /dev/myvg/mylv
[ ~]# lvs
[ ~]# vgs
b.扩展文件系统的大小
扩展ext4文件系统:使用resize2fs进行格式化
扩展xfs文件系统: 使用xfs_growfs进行格式化
[ ~]# df  -h | tail -1
[ ~]# blkid /dev/myvg/mylv
[ ~]# resize2fs /dev/myvg/mylv   #格式化
[ ~]# df  -h | tail -1
(2)卷组没有足够的剩余空间
a.扩展卷组空间
[ ~]# vgextend myvg /dev/vdc3
[ ~]# vgs
b.直接扩展逻辑卷的空间
[ ~]# vgs
[ ~]# lvextend  -L  25G  /dev/myvg/mylv
[ ~]# lvs
[ ~]# vgs
c.扩展文件系统的大小
[ ~]# df  -h | tail -1
[ ~]# resize2fs /dev/myvg/mylv
[ ~]# df  -h | tail -1
以下作为了解:
缩减:不要做, 先缩减文件系统的大小,在缩减空间大小
[ ~]# resize2fs /dev/myvg/mylv 10G
[ ~]# umount /lvm
[ ~]# resize2fs /dev/myvg/mylv 10G
resize2fs 1.42.9 (28-Dec-2013)
请先运行 ‘e2fsck -f /dev/myvg/mylv‘.
[ ~]# e2fsck -f /dev/myvg/mylv
[ ~]# resize2fs /dev/myvg/mylv 10G
[ ~]# lvreduce -L 10G /dev/myvg/mylv
[ ~]# lvreduce -L 10G /dev/myvg/mylv
WARNING: Reducing active logical volume to 10.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
 
3.3 创建卷组的时候设置PE大小
– vgcreate -s  PE大小   卷组名    空闲分区...
– vgchange -s  PE大小   卷组名
PE:卷组划分空间的单位   4M
[ ~]# vgdisplay myvg
[ ~]# vgchange -s 2M  myvg
[ ~]# vgdisplay myvg
 
3.4 创建逻辑卷的时候指定PE个数
lvcreate   -l   PE个数  -n   逻辑卷名 卷组名
[ ~]# lvcreate  -l  102  -n  lvtest02  myvg
Logical volume "lvtest02" created
[ ~]# lvs
 

4、交换分区swap(虚拟内存)

• 相当于虚拟内存,
– 当物理内存不够用时,使用磁盘空间来模拟内存
– 在一定程度上缓解内存不足的问题
[ ~]# swapon -s    #查看交换空间,组成 成员信息
[ ~]# mkswap /dev/vdc5    #格式化,交换文件系统
[ ~]# swapon /dev/vdc5    #启用交换分区
 
[ ~]# mkswap /dev/vdc6   #格式化,交换文件系统
[ ~]# swapon /dev/vdc6   #启用交换分区
[ ~]# swapon -s
 
开机自动启用交换分区 /etc/fstab
[ ~]# vim /etc/fstab           #开机自挂载
/dev/vdc5  swap  swap   defaults  0 0
/dev/vdc6  swap  swap   defaults  0 0
 
[ ~]# swapoff /dev/vdc[5-6]   #停用交换分区
[ ~]# swapon -s
[ ~]# swapon -a     #检测/etc/fstab交换分区
[ ~]# swapon -s
 
大容量的使用gpt分区模式:gdisk
交换分区的优先级:-1
 
逻辑卷的扩展:扩展之后lsblk 显示的是扩展之后的总容量
而df -h显示的还是原来的大小
磁盘情况刷新:partprobe
 
功能                物理卷管理      卷组管理      逻辑卷管理
scan/扫描        pvscan            vgscan           lvscan
create/创建     pvcreate          vgcreate         lvcreate
display            pvdisplay         vgdisplay       lvdisplay
remove           pvremove        vgremove       lvremove
extend                                    vgextend        lvextend
 
5、关于dd命令的使用
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2
dd if="input_file" of="out_file"  bs="block_size"  count="number"
参数注释:
1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
   obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
   bs=bytes:同时设置读入/输出的块大小为bytes个字节。
4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
8. conv=conversion:用指定的参数转换文件。
    ascii:转换ebcdic为ascii
    ebcdic:转换ascii为ebcdic
    ibm:转换ascii为alternate ebcdic
    block:把每一行转换为长度为cbs,不足部分用空格填充
    unblock:使每一行的长度都为cbs,不足部分用空格填充
    lcase:把大写字符转换为小写字符
    ucase:把小写字符转换为大写字符
    swab:交换输入的每对字节
    noerror:出错时不停止
    notrunc:不截短输出文件
    sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
 
 
 案例:/dev/sdb磁盘分区、格式化、挂载
1、磁盘分区操作
[ ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
 
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
 
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x711d3770.
 
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759
Partition 1 of type Linux and of size 5 GiB is set
 
Command (m for help): p
 
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x711d3770
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10485759     5241856   83  Linux
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
Syncing disks.
此时查看磁盘分区情况:
[ ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0             2:0    1    4K  0 disk
sda             8:0    0    5G  0 disk
├─sda1          8:1    0  500M  0 part /boot
└─sda2          8:2    0  4.5G  0 part
  ├─rhel-root 253:0    0    4G  0 lvm  /
  └─rhel-swap 253:1    0  512M  0 lvm  [SWAP]
sdb             8:16   0    5G  0 disk
└─sdb1          8:17   0    5G  0 part
sr0            11:0    1  3.5G  0 rom
 
2、格式化
[ ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=327616 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=1310464, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
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
 
[ ~]# blkid
/dev/sda1: UUid="8593eb92-1b71-4f9f-9baf-cbed97462e78" TYPE="xfs"
/dev/sda2: UUid="UizqW3-bEOH-iNXT-q4c1-xfua-TTwK-FJiOMk" TYPE="LVM2_member"
/dev/sr0: UUid="2014-05-07-03-58-46-00" LABEL="RHEL-7.0 Server.x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/rhel-root: UUid="6ebb5d4b-51dd-4d9b-85b8-78b7aed37d30" TYPE="xfs"
/dev/mapper/rhel-swap: UUid="43f548d3-1ea3-4d8d-9cec-f90aef868ca1" TYPE="swap"
/dev/sdb1: UUid="db62328e-05c1-4760-ba6d-44e90cf5c4c5" TYPE="xfs"
3、挂载
[ ~]# mount /dev/sdb1 /dvd/
[ ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               910M     0  910M   0% /dev
tmpfs                  918M     0  918M   0% /dev/shm
tmpfs                  918M  8.6M  909M   1% /run
tmpfs                  918M     0  918M   0% /sys/fs/cgroup
/dev/mapper/rhel-root  4.0G  2.2G  1.9G  53% /
/dev/sda1              497M  100M  398M  20% /boot
/dev/sdb1              5.0G   33M  5.0G   1% /dvd
 
案例:上述分区后的磁盘取消挂载后进行逻辑卷操作
(1)新建卷组
[ ~]# vgcreate myvg /dev/sdb1
WARNING: dos signature detected on /dev/sdb1 at offset 510. Wipe it? [y/n] y
  Wiping dos signature on /dev/sdb1.
  Physical volume "/dev/sdb1" successfully created
  Volume group "myvg" successfully created
(2)查看卷组
[ ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   1   0   0 wz--n- 5.00g 5.00g
  rhel   1   2   0 wz--n- 4.51g    0
 
[ ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda2  rhel lvm2 a--  4.51g    0
  /dev/sdb1  myvg lvm2 a--  5.00g 5.00g
 
(3)创建逻辑卷
[ ~]# lvcreate -n mylv -L 100M myvg
  Logical volume "mylv" created
[ ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a----- 100.00m
  root rhel -wi-ao----   4.01g
  swap rhel -wi-ao---- 512.00m
(4)格式化
[ ~]# mkfs.xfs /dev/myvg/mylv
meta-data=/dev/myvg/mylv         isize=256    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
 
 
[ ~]# blkid
/dev/sda1: UUid="8593eb92-1b71-4f9f-9baf-cbed97462e78" TYPE="xfs"
/dev/sda2: UUid="UizqW3-bEOH-iNXT-q4c1-xfua-TTwK-FJiOMk" TYPE="LVM2_member"
/dev/sr0: UUid="2014-05-07-03-58-46-00" LABEL="RHEL-7.0 Server.x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/rhel-root: UUid="6ebb5d4b-51dd-4d9b-85b8-78b7aed37d30" TYPE="xfs"
/dev/mapper/rhel-swap: UUid="43f548d3-1ea3-4d8d-9cec-f90aef868ca1" TYPE="swap"
/dev/sdb1: UUid="r0Gwlx-9ncs-3STR-hADl-JELT-03fe-hWSD6C" TYPE="LVM2_member"
/dev/mapper/myvg-mylv: UUid="573daf95-04bc-420f-9086-c016082ce1d2" TYPE="xfs"
[ ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0             2:0    1    4K  0 disk
sda             8:0    0    5G  0 disk
├─sda1          8:1    0  500M  0 part /boot
└─sda2          8:2    0  4.5G  0 part
  ├─rhel-root 253:0    0    4G  0 lvm  /
  └─rhel-swap 253:1    0  512M  0 lvm  [SWAP]
sdb             8:16   0    5G  0 disk
└─sdb1          8:17   0    5G  0 part
  └─myvg-mylv 253:2    0  100M  0 lvm
sr0            11:0    1  3.5G  0 rom
(5)挂载使逻辑卷
[ ~]# mount /dev/myvg/mylv /dvd/
[ ~]#
[ ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               910M     0  910M   0% /dev
tmpfs                  918M     0  918M   0% /dev/shm
tmpfs                  918M  8.6M  909M   1% /run
tmpfs                  918M     0  918M   0% /sys/fs/cgroup
/dev/mapper/rhel-root  4.0G  2.2G  1.9G  53% /
/dev/sda1              497M  100M  398M  20% /boot
/dev/mapper/myvg-mylv   97M  5.2M   92M   6% /dvd
 
5、RAID
RAID阵列概述(Redundant Arrays of Inexpensive Disks)   廉价冗余磁盘阵列
– 通过硬件/软件技术,将多个较小/低速的磁盘整合成一个大磁盘
– 阵列的价值:提升I/O效率、硬件级别的数据冗余
– 不同RAID级别的功能、特性各不相同
5.1 RAID0
条带模式
最少使用两块磁盘;
同一个文档分散存在不同磁盘;
并行写入以提高效率;
Linux磁盘与文件系统管理
5.2 RAID1
镜像模式
最少使用两块磁盘;
一个文档复制成多份,分别写入不同磁盘;
多份拷贝提高可靠性,效率无提升;
Linux磁盘与文件系统管理
5.3 RAID01/RAID10
整合RAID0,RAID1的优势;并行存取提高效率,镜像写入提高可靠性
Linux磁盘与文件系统管理
5.4 RAID5
高性价比模式,至少3块磁盘
相当于RAID0和RAID1的折中方案
至少需要一块磁盘的容量来存放校验数据
Linux磁盘与文件系统管理

相关推荐