linux磁盘管理
磁盘管理
存储设备(块设备)的管理(硬盘 移动硬盘 U盘 光盘 软盘 阵列...)
块设备操作流程: 分区 格式化(文件系统格式) 挂载
fdisk 用于管理磁盘的分区。
编辑分区表是危险操作,操作不当的话会造成无法访问分区,使数据丢失(数据还在磁盘上,并没有真正丢失,但是想访问它很难),一个安全的做法是先备份分区表到别的存储设备,然后再修改,这样就可以随时恢复原来的分区表
sudo fdisk -l /dev/sda <-- 列出块设备/dev/sda上面的分区表
备份分区表,以下方法任何一个都可以
1. 连同启动加载程序一起备份
head -c 512 /dev/sda > /some/where/boot_sector.bin
2. 仅仅备份分区表
head -c 510 /dev/sda | tail -c 64 > /some/where/partition_table.bin
恢复分区表(慎用)
dd if=./mbr.txt of=/dev/sda bs=1 count=512
查看磁盘信息
从整体的角度上,硬盘接口分为IDE、SATA、SCSI和光纤通道四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而光纤通道只在高端服务器上,价格昂贵。SATA是种新生的硬盘接口类型,
sudo fdisk -l
设备文件 /dev/sda
sda 主机的第一块SATA硬盘
s 硬盘类型(硬盘接口: SATA IDE virtio 磁盘)
SATA,U盘,移动硬盘 s
IDE h
virtio 半虚拟化磁盘 v
d 存储设备
a 第一个块同类型的硬盘
.
e 第五块同类型的硬盘
sdb 主机的第二块SATA硬盘
hda 主机的第一块IDE硬盘
vda 主机的第一块virtio 磁盘
sda1 主机的第一块SATA硬盘的第一个分区
sda2 主机的第一块SATA硬盘的第二个分区
分区表 (MBR/GPT)
BIOS -> MBR -> fdisk(mbr分区管理工具)
UEFI -> GPT -> gdisk(gpt分区管理工具)
mbr是现在最流行的一个分区模式
gpt是以后的主流
最大的区别: mbr稳定性高
gpt能使用2T以上的硬盘, 而mbr不行
MBR 分区表规则
硬盘的第一个逻辑块(扇区)用于存储MBR信息(512字节)
MBR(512) = 启动代码 + 分区表(64)
分区表(64字节)
一个分区信息占16字节, 最后可分4个分区, 称为主分区
扩展分区, 占用一个主分区位,用于扩展分区信息
逻辑分区, 在扩展分区内再继续划分的分区
个人分区方案(MBR)
第一个主分区 50G windows C盘
第二个主分区 50G 黑苹果系统分区
第三个主分区 4G boot分区
第四个主分区 扩展分区
第一个逻辑分区 4G 交换分区
第二个逻辑分区 50G linux的家目录(/home) 个人数据存储
第三个逻辑分区 30G 主linux系统的根分区(ubuntu)
第四个逻辑分区 20G 从linux系统的根分区(centos)
第五个逻辑分区 20G 测试linux系统的根分区
..
最后一个逻辑分区 剩于空间 windows D盘
个人分区方案(GPT)
第一个分区 4G ESP分区(boot分区)
第二个分区 1M 兼容分区(BIOS)
第三个分区 50G windows 7 C盘
第四个分区 4G 交换分区
第五个分区 50G linux的家目录(/home) 个人数据存储
第六个分区 30G 主linux系统的根分区(ubuntu)
第七个分区 20G 从linux系统的根分区(centos)
第八个分区 20G 测试linux系统的根分区
...
最后一个分区 剩于空间 windows D盘
个人分区方案(GPT + LVM)
第一个分区 4G ESP分区(boot分区)
第二个分区 1M 兼容分区(BIOS)
第三个分区 50G windows 7 C盘
第四个分区 100G LVM
设置分区方案
第一个分区 30G cenots根分区 83
第二个分区 30G windows C盘 7
第三个分区 4G boot分区 83
第四个分区 扩展分区
第一个逻辑分区 4G 交换分区 82
第二个逻辑分区 50G /home 83
第三个逻辑分区 30G ubuntu 83
第四个逻辑分区 20G mint 83
...
最后逻辑分区 剩于空间 windows D盘 7
分区管理
sudo fdisk /dev/sda
进入分区管理的交互界面
l 列出已知分区类型
m 获取帮助
p 打印分区表
d 删除分区
q 退出
w 写入mbr
n 新建分区
询问扩展分区(e)还是主分区(p) (还有主分区位才会询问)
选择扩展分区才要将剩于空间全部占完
询问占用主分区位(必须选择默认值)
访问新建分区的起始逻辑块(必须选择默认值)
访问新建分区的结束逻辑块, 标识此分区的大小, 建议: +30G
t 修改分区类型
询问修改哪个分区的类型
询问修改哪个类型 (L 可以查找分区类型, 再输入对应ID)
创建扩展分区后,还需要创建逻辑分区,选择L 这样后面才可以格式化创建文件系统
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
保存分区表之后,设备文件并没有对应生成, 生成对应的设备文件:
方法一: reboot
方法二: sudo partprobe
创建文件系统
文件系统是用来管理文件的系统,在文件系统里面,数据以文件的形式。
不过,存取磁盘里的数据,不一定需要文件系统,像swap 设备就没有文件系统。
创建文件系统就是常说的:分区格式化 mkfs
格式化boot分区:
mkfs -t ext2 /dev/sda3
格式化windows C盘
mkfs.vfat /dev/sda2
或
mkfs.ntfs /dev/sda2 (很慢)
windows下的文件系统fat32在linux里被识别为vfat
/ /boot 都是xfs文件系统 目前一般用xfs文件系统
centos 7 xfs
centos 6 ext4
centos 5 ext3
格式化home分区
mkfs.ext4 /dev/sdb1
格式化逻辑分区xfs文件系统
mkfs.xfs /dev/sdb5
挂载 mount
查看当前挂载情况
mount
挂载源 on 挂载目标 type 挂载类型 (挂载选项)
df -h 查看简单的挂载信息
命令选项
-t 指定挂载文件系统类型, 自动识别(可以省略)
-o 指定挂载选项(因为有默认选项, 所以也可省略)
挂载选项 (挂载选项可写多个,以逗号分隔)
ro 只读
rw 可读可写(默认)
remount 重新挂载
bind 绑定目录
loop 使用loop块设备
noauto 不开机自动挂载
挂载
将ext2文件系统格式分区挂载到/disk/boot
mount -t ext2 -o rw /dev/sda3 /disk/boot
将vfat文件系统格式分区挂载到/disk/C
mount -t vfat /dev/sda2 /disk/C
将ntfs文件系统格式分区挂载到/disk/D
mount.ntfs-3g /dev/sda2 /disk/D
安装ntfs-3g 支持NTFS格式的磁盘,
sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sudo yum install ntfs-3g -y
将网络文件系统挂载到/mnt
mount -t nfs 192.168.0.183:/soul /mnt
将iso镜像文件挂载到/mnt
mount -t iso9660 -ro loop /soul/images/centos.iso /yum
将/soul绑定到/mnt(访问/mnt即访问/soul)
mount -o bind /soul /mnt
将windos的共享文件挂载到linux中 启用smb服务。在控制面板->程序和功能->启动或关闭windows更能中勾选SMB的相关项,之后重启电脑即可
mount -t cifs //172.17.46.192/相关镜像文件2 /win/ -o user=Administrator,password=zx.yes
重新挂载
mount -o remount,rw /dev/sda1
或
mount -o remount,rw /
取消挂载(PPP2)
umount /mnt
umount /dev/sda3
强制取消挂载
umount -l /mnt
交换分区
swap的作用和配置方法
内存不够用时,才会使用swap 设备
查看内存和交换分区的使用量
free -m
fdisk -l 查看交换分区的磁盘位置
/dev/sda2 526336 4720639 2097152 82 Linux swap / Solaris
停用交换分区
swapoff /dev/sda2
启用交换分区
swapon /dev/sda2
格式化交换分区 需要把交换分区停了才能格式化
mkswap /dev/sda2
linux的内存机制是先缓存大量的数据,看上去的系统在占用大量的内存, 但是
这个只是linux系统的一种缓存机制, 加速下次的访问速度, 只要没有使用
交换分区就代表内存没有被全部消耗
测试系统消耗内存的好处
生成一个1G的大文件
dd if=/dev/zero of=2_2G.txt bs=1M count=1024
清空缓存
echo "3" | sudo tee /proc/sys/vm/drop_caches
读取此文件并测试所消耗的时间:
time cat 2_2G.txt > /dev/null
real 0m4.477s
user 0m0.008s
sys 0m0.620s
使用的时间是4.47S
读取此文件并测试所消耗的时间:
time cat 2_2G.txt > /dev/null
real 0m0.163s
user 0m0.002s
sys 0m0.160s
再次读取的时间是0.163S
开机自动挂载配置文件 /etc/fstab
UUID=db6a4392-ccb0-41af-863f-4de76cad1c0a / ext4 errors=remount-ro 0 1
UUID=67a2f488-1421-495a-ada1-dc022c29d77d none swap sw 0 0
挂载源 挂载目标 文件系统格式 挂载选项 dump备份 开机自检
UUID=96A4-6194 /disk/C vfat defaults 0 0
UUID=51c35f8c-c9dd-498e-9f05-203d6f931fa6 /disk/boot ext2 defaults 0 0
UUID=c9edda7d-dbc2-443a-81a4-5a729fc9b27a none swap sw 0 0
/disk/ubuntu-16.04.4-server-amd64.iso /opt iso9660 loop,ro 0 0
挂载/etc/fstab配置里所有挂载条目: mount -a
UUID: 分区唯一标识符
设备名称会因硬盘变动而发生改变(删除中间分区 添加硬盘等)
分区只要不格式化, 此分区UUID绝对唯一, 不会冲突
查看块设备的UUID: sudo blkid /dev/sda{1..2}
/dev/sda1: UUID="0d1c509a-28d7-4f86-a900-ec04174a2613" TYPE="xfs"
/dev/sda2: UUID="H2FW0i-snFz-Kmn7-gQp6-XZ6e-Nm2z-I1PEhV" TYPE="LVM2_member"
查看已挂载磁盘使用情况: df -h
树型结构查看所有硬盘分区表: lsblk
生成指定大小的空文件
head -c 1G /dev/zero > swapfile
dd if=/dev/zero of=./swapfile bs=1024 count=1024
加密分区
安装: sudo yum install cryptsetup* -y(基本都已经安装好的)
创建加密分区
得是一个新创建的分区, 正在使用或者使用过的分区不能加密
sudo cryptsetup luksFormat /dev/sdb5
询问是否继续的时候要输入YES, yes/y 小写不行,会终止
输入加密分区的密码, 不能忘记,忘记的话加密分区就无法再访问 不能少于8个字符,也不能太简单
解密分区 (生成解密后的设备文件)
sudo cryptsetup luksOpen /dev/sdb5 soul
输入加密分区的密码
这里的soul为自定义
首次使用先格式化加密后的分区
sudo mkfs -t ext4 /dev/mapper/soul
挂载加密分区
sudo mount /dev/mapper/soul /mnt
对/mnt进行操作即是对加密分区进行操作
取消挂载的加密分区
sudo umount /dev/mapper/soul
取消解密分区(释放解密后的设备文件)
sudo cryptsetup luksClose soul
取消解密分区后,如果想要再次挂载 /dev/sdb5 这个磁盘分区, mount /dev/sdb5 /mnt 就挂载不了了。
只能先解密分区 (或者重新强制格式化,mkfs.xfs /dev/sdb5 -f )
cryptsetup luksOpen /dev/sdb5 server1
再次挂载加密分区
mount /dev/mapper/server1 /mnt
这时候会发现之前soul分区的内容还在,因为没有格式化
取消挂载的加密分区
umount /dev/mapper/server1
当我们用完我们的加密分区后,就可以卸载它然后再锁住,这样数据就又会保护起来
我们要先卸载我们挂上去的分区,然后再锁住,如果不能锁住,可以尝试下把挂载目录删了
分区方案:
/dev/sda1 30G / linux
/dev/sda2 4G swap
/dev/sda3 4G /boot linux
/dev/sda4 1K extend
/dev/sda5 50G ubuntu lvm
/dev/sda6 50G min-centos lvm
/dev/sda7 50G mint lvm
LVM
LVM是Linux下对磁盘空间管理的一种方法(动态扩容/缩减空间)
安装LVM:
sudo yum install lvm2 -y
物理卷(PV) 对应 硬盘分区 块设备
创建pv之前要对分区进行格式化
创建 pvcreate
sudo pvcreate /dev/sdb5
查看物理卷简单信息
sudo pvs
查看物理卷稍微详细一点的信息
sudo pvscan
查看物理卷的详细信息
sudo pvdisplay
更改 sudo pvchange
删除 sudo pvremove
卷组(VG) 用于管理物理卷
最好不要给/目录扩容,到时候锁减不行,因为目录一直在使用中,除非取消挂载,
创建 vgcreate
sudo vgcreate 卷组名 物理卷设备路径...
查看 vgs vgscan vgdisplay
删除 vgremove 卷组名
更改 vgchange vgextend
扩容卷组(增加物理卷)
sudo vgextend vg1 /dev/sdb5
缩减卷组(减少物理卷)
sudo vgreduce vg1 /dev/sdb5
逻辑卷(LV) 在卷组之上划分 分区
创建 lvcreate
sudo lvcreate --name 逻辑卷名 --size 10G 卷组名
查看 lvs lvscan lvdisplay
删除 lvremove
更改 lvchange lvextend
扩容(lvextend)
逻辑卷的大小一定要小于或者等于物理卷的大小
第一步: 给home逻辑卷加10G空间
lvresize -L +10G /dev/vg1/lv1
第二步: 扩大文件系统的显示
resize2fs /dev/vg1/lv1
两步可以合成一步完成:
lvresize -r -L +10G /dev/vg1/lv1
这时候家目录就已经增加了容量了
缩减 (lvreduce)
必须先取消挂载, 并且缩减剩于空间足够
lvresize -r -L -10G /dev/vg1/lv1
首先把硬盘分区或者整块硬盘标记为一个物理卷(PV), 然后再创建一个卷组(VG),
把一个或多个物理卷加入卷组,最后对卷组进行分区,
每一个分区称为一个逻辑卷(LV)。
一、实施LVM存储
1、进入交互式界面后,创建新分区
1 | #fdisk /dev/sdb |
2、创建物理卷(pv)
1 | #pvcreate /dev/sdb5 |
可使用pvs、pvdisplay查看
3、创建卷组(vg)
1 | #vgcreate vg1 /dev/sdb5 |
可使用vgs、vgdisplay查看
4、创建逻辑卷(lv)
1 | #lvcreate -n lv1 vg1 -L 5G |
可使用lvs、lvdisplay查看
5、建立文件系统
根据需要创建不同类型的文件系统,例如ext4
1 | #mkfs.ext4 /dev/vg1/lv1 |
二、 删除逻辑卷
1、卸载挂载点
1 | #umount /data |
2、删除逻辑卷
1 | #lvremove /dev/vg1/lv1 |
3、删除卷组
1 | #vgremove vg1 |
4、删除物理卷
1 | #pvremove /dev/sdb5 |
三、扩展和缩减卷组
假如vg容量不够,需要新建分区-创建物理卷-扩展卷组
1 | #fdisk /dev/sdb //创建分区 |
若想缩减卷组需要缩减卷组-缩减物理卷
1 | #vgreduce vg1 /dev/sdb6 |
四、扩展逻辑卷和文件系统
扩展逻辑卷后需根据文件系统类型进行扩展
1 | #lvextend /dev/vg1/lv1 -r -L +10G //将LV增加10G |
启动管理
mbr里的启动程序 - grub -> bootloader程序(启动内核并且传参)
centos7 -> grub2
ubuntu -> grub
windows -> grub4dos
grub配置文件: /boot/grub2/grub.cfg
grub识别分区
hd0 代表第一块硬盘
hd0,msdos1 代表第一块硬盘的第一个分区
hd1,gpt2 代表第二块硬盘的第二个分区
第一块硬盘的第三个分区中boot目录的vmlinuz文件的grub路径
(hd0,msdos3)/boot/vmlinuz
grub命令
set 设置grub环境变量
设置菜单等待显示风格(hidden代表隐藏)
set timeout_style=menu
设置菜单等待时间 (秒)
set timeout=30
设置grub环境的根分区
set root='hd0,msdos1'
如果设置了root环境变量, 访问第一块硬盘第一个分区boot目录下vmlinuz文件的路径
/boot/vmlinuz
设置grub默认进入操作系统条目
set default=2
menuentry 创建菜单项
menuentry 'My Menu Options' {
...
}
linux 启动哪个内核
initrd 启动哪个临时文件系统
boot 启动系统 (grub命令行)
启动ubuntu系统的菜单的grub配置内容
menuentry 'Ubuntu16.04.4' {
set root='hd0,msdos1'
linux /boot/vmlinuz-4.4.0-116-generic root=/dev/sda1
initrd /boot/initrd.img-4.4.0-116-generic
}
或
menuentry 'Ubuntu16.04.4' {
linux (hd0,msdos1)/boot/vmlinuz-4.4.0-116-generic root=/dev/sda1
initrd (hd0,msdos1)/boot/initrd.img-4.4.0-116-generic
}
grub配置文件错误或丢失的效果, 开机进入提示 grub> 命令行:
set root=(hd0,1)
linux /boot/vmlinuz-4.4.0-130-generic root=/dev/sda1
输入linux /boot/vmlinuz-再按TAB补全文件
initrd /boot/initrd.img-4.4.0-130-generic
boot
grub模块目录丢失的效果, 开机进入提示 grub-rescue> 命令行:
前提: 已知grub目录在第一块硬盘的第一个分区下
set prefix=(hd0,1)/grub
设置grub程序根目录(模块根目录)
set root=(hd0,1)
设置grub环境的默认根分区, 设置/对应位置
insmod normal
导入normal核心模块(菜单选项代码)
normal
运行normal模块代码, 运行成功后进入grub菜单
centos系统上硬盘安装centos (依赖Lvm分区方案)
前提工作:
sudo cp /soul/images/centos.iso /
sudo cp /yum/isolinux/vmlinuz /yum/isolinux/initrd.img /
/etc/grub2.cfg 追加内容:
menuentry '----- CentOS 7 Install -----' {
linux (hd0,1)/vmlinuz linux repo=hd:/dev/sda1:/
initrd (hd0,1)/initrd.img
}
如果在grub命令行输入命令则不需要修改grub配置文件
grub命令行
grub> linux (hd0,1)/vmlinuz linux repo=hd:/dev/sda1:/
grub> initrd (hd0,1)/initrd.img
grub> boot
重启电脑进入grub菜单选择CentOS 7 Install菜单项按回车
进入CentOS7安装界面会让用户选择以什么方式安装(http ftp nfs cdrom hard)
选择硬盘安装 -> 选择镜像文件所在分区(/dev/sda1)
注意: 选择安装的分区
ubuntu系统上硬盘安装mint19
前提工作:
sudo mount /dev/sda6 /disk/data
sudo chown $USER:$USER /disk/data -R
wget http://3.3.3.1/iso/linuxmint-19-cinnamon-64bit.iso -O /disk/data/mint19.iso
或
wget http://3.3.3.9/iso/mint19.iso -O /disk/data/mint19.iso
mount -o loop,ro /disk/data/mint19.iso /mnt
重启电脑进入grub命令行 (grub菜单界面按c进入grub命令行)
set root=(hd0,6)
loopback loop /mint19.iso
set root=(loop)
linux /casper/vmlinuz boot=capser iso-scan/filename=/mint19.iso --
initrd /casper/initrd.lz
boot
进入mint19的试用系统中
按ctrl + alt + t 打开终端输入: sudo umount -l /isodevice
点击桌面安装程序, 点击下一步, 其中进入分区选择
boot分区 --> /dev/sda3 不要格式化
home分区 --> /dev/up/home 不要格式化
mint根分区 --> /dev/up/mint
swap分区 --> /dev/up/swap
ubuntu系统上硬盘安装windows 7
前提:
自己下载win7的ghost.gho文件, 复制到/dev/sda7(D盘)分区中
把ghost.img和memdisk文件复制到/dev/sda6分区
sudo mount /dev/sda6 /disk/data
sudo mount 3.3.3.9:/kyo /mnt
cp /mnt/tools/{ghost.img,memdisk} /disk/data/
重启电脑进入grub命令行
set root=(hd0,6)
linux16 /memdisk c=2000 h=4 s=36 floppy
initrd16 /ghost.img
boot
进入ghost程序将win7的gho文件还原到C盘(/dev/sda2)
ghost完成之后再进入grub命令行
set root=(hd0,2)
chainloader +1
boot
/boot 存储启动相关文件
建议/boot目录对应独立分区(必须是主分区 并且是ext2格式)
grub
grub.cfg 配置文件
丢失进入grub> 命令行
i386-pc grub的模块目录
丢失进入grub rescue> 命令行
vmlinuz-4.4.0-116-generic 内核文件
initrd.img-4.4.0-116-generic 临时文件系统
修复grub引导程序(BIOS + MBR)
重启grub程序, 会自动将grub引导程序写入mbr并且固定在/boot目录下生成grub相关文件
grub-install /dev/sda
ubuntu grub.cfg的自动生成
update-grub
问题: 根分区完整的前提下, 只是引导程序或相关文件丢失导致引导不了系统
借助第三方linux系统来进行修复 (U盘 网络 光盘)
首先进入第三方设备提供的linux系统:
1. 挂载修复系统的根分区
mount /dev/sda1 /mnt
2. 挂载boot分区到/mnt/boot目录下
mount /dev/sda3 /mnt/boot/
3. 将内核相关目录挂载(proc sys dev tmp)
mount -o bind /proc /mnt/proc/
mount -o bind /sys /mnt/sys/
mount -o bind /dev /mnt/dev/
mount -o bind /tmp /mnt/tmp/
4. 切换到ubuntu系统(进入ubuntu的系统)
chroot /mnt
5. 重装grub
grub-install /dev/sda
Grub引导其它系统
前提: 将mint centos ubuntu的启动文件全部统一放在boot分区(/dev/sda3)
grub ubuntu/mintw
(hd0,3)/grub/grub.cfg
grub2 centos7
(hd0,3)/grub2/grub.cfg
centos7:
initramfs-3.10.0-862.el7.x86_64.img
vmlinuz-3.10.0-862.el7.x86_64
mint:
initrd.img-4.15.0-20-generic
vmlinuz-4.15.0-20-generic
ubuntu:
initrd.img-4.4.0-116-generic
vmlinuz-4.4.0-116-generic
-----------------------------------------------------------------------
grub命令行启动ubuntu:
linux (hd0,3)/vmlinuz-4.4.0-116-generic root=/dev/sda1 quiet splash
initrd (hd0,3)/initrd.img-4.4.0-116-generic
boot
grub命令行启动mint:
linux (hd0,3)/vmlinuz-4.15.0-20-generic root=/dev/mapper/up-mint quiet splash
initrd (hd0,3)/initrd.img-4.15.0-20-generic
boot
grub命令行启动centos:
linux (hd0,3)/vmlinuz-3.10.0-862.el7.x86_64 root=/dev/mapper/up-centos quiet splash
initrd (hd0,3)/initramfs-3.10.0-862.el7.x86_64.img
boot
--------------------------------------------------------------------------
grub.cfg配置菜单
1 | # kyo grub config |
- 本文标题:linux磁盘管理
- 本文作者:yichen
- 本文链接:https://yc6.cool/2020/08/03/linux磁盘管理/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
1.sed的常用命令的使用
2.linux根下目录文件介绍
3.vim的使用
4.linux中丢失grub.cfg引导文件修复
5.linux系统管理
6.磁盘命令lvm
7.linux软件管理
8.dnf包管理