linux · 2021年 2月 11日 0

Linux硬盘管理

前提条件: 已挂载数据盘至云服务器,且该数据盘未初始化。[REF](https://support.huaweicloud.com/qs-evs/evs_01_0033.html)

linux硬盘初始化

查看新增数据盘

fdisk -l

使用fdisk分区工具

1. 执行以下命令,进入fdisk分区工具,开始对新增数据盘执行分区操作.以新挂载的数据盘“/dev/vdb”为例:

fdisk /dev/vdb

2. 输入“n”,按“Enter”,开始新建分区

3. 以创建一个主要分区为例,输入“p”,按“Enter”,开始创建一个主分区

4. 以分区编号选择“1”为例,输入主分区编号“1”,按“Enter”

5. 以选择默认起始磁柱值2048为例,按“Enter”

6. 以选择默认截止磁柱值209715199为例,按“Enter”

7. 输入“p”,按“Enter”,查看新建分区的详细信息

8. 输入“w”,按“Enter”,将分区结果写入分区表中,分区创建完成!!!

9. 执行以下命令,将新的分区表变更同步至操作系统

partprobe

10. 将新建分区文件系统设为系统所需格式,以设置文件系统为“ext4”为例:

mkfs -t ext4 /dev/vdb1

执行以下命令,新建挂载目录,以新建挂载目录“/mnt/sdc”为例:

mkdir /mnt/sdc

执行以下命令,将新建分区挂载到12中创建的目录下,以挂载新建分区“/dev/vdb1”至“/mnt/sdc”为例:

mount /dev/vdb1 /mnt/sdc

查看挂载结果。

df -TH


磁盘挂载问题:`Fdisk` 最大只能创建`2T` 分区的盘,超过 `2T` 使用`parted`

显示硬盘及所属分区情况。

在终端窗口中输入如下命令

$ sudo fdisk -l
Disk /dev/sda:931.5 GiB,1000204886016 字节,1953525168 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:135AABA1-1AB1-4C64-816B-28AEC718E091

设备 起点 末尾 扇区 大小 类型
/dev/sda1 2048 1050623 1048576 512M EFI 系统
/dev/sda2 1050624 1953523711 1952473088 931G Linux 文件系统

Disk /dev/sdb:2.7 TiB,3000592982016 字节,5860533168 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x86393e69

设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 4294967294 4294965247 2T 83 Linux

可以看到要挂在的 `3T` 磁盘,**因 `fdisk` 分区最大只能 `2T` ,所以这里使用 `parted` 来分区.**

因为`MBR` 分区表不支持容量大于2.2 TB(2.2 × 1012字节)的分区,所以也有一些 `BIOS` 系统为了支持大容量硬盘而用 `GPT` 分区表取代`MBR` 分区表。

$ sudo parted /dev/sdb
GNU Parted 3.2
使用 /dev/sdb
欢迎使用 GNU Parted!输入 'help' 来查看命令列表。
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] 打印通用求助信息,或 COMMAND 的帮助
mklabel,mktable LABEL-TYPE 创建新的磁盘卷标 (分区表)
mkpart 分区类型 [文件系统类型] 起始点 结束点 创建一个分区
name 编号 名称 将指定“编号”的分区命名为“名称”
print [devices|free|list,all|数字] 显示分区表、可用设备、剩余空间、所有分区或特殊分区
quit 退出程序
rescue 起始点 终止点 挽救临近“起始点”、“终止点”的遗失的分区
resizepart NUMBER END 改变 NUMBER 的大小
rm NUMBER 删除编号为 NUMBER 的分区
select 设备 选择要编辑的设备
disk_set 旗标 状态 变更已选设备上的旗标
disk_toggle [旗标] 切换已选设备上的旗标状态
set 编号 旗标 状态 改变指定“编号”分区的旗标
toggle [编号 [旗标]] 切换“编号”分区上的“旗标”状态
unit 单位 设置缺省的“单位”
version 显示目前 GNU Parted 的版本与版权信息
(parted) print
型号:ATA ST3000NM0033-9ZM (scsi)
磁盘 /dev/sdb: 3001GB
扇区大小 (逻辑/物理):512B/512B
分区表:msdos
磁盘标志:

编号 起始点 结束点 大小 类型 文件系统 标志
建立磁盘标签

(parted) mklabel gpt
警告: 现有 /dev/sdb 上的磁盘卷标将被销毁,而所有在这个磁盘上的数据将会丢失。您要继续吗?
是/Yes/否/No? Yes

(parted) print
型号:ATA ST3000NM0033-9ZM (scsi)
磁盘 /dev/sdb: 3001GB
扇区大小 (逻辑/物理):512B/512B
分区表:gpt
磁盘标志:

创建分区,并分配合适的大小
(parted) mkpart primary 0% 67%
(parted) mkpart primary 68% 100%
(parted) print
型号:ATA ST3000NM0033-9ZM (scsi)
磁盘 /dev/sdb: 3001GB
扇区大小 (逻辑/物理):512B/512B
分区表:gpt
磁盘标志:

编号 起始点 结束点 大小 文件系统 名称 标志
1 1049kB 2010GB 2010GB primary
2 2040GB 3001GB 960GB primary

(parted) quit
信息: 你可能需要 /etc/fstab。

执行 `fdisk -l` ,可以看到 `sdb1`、`sdb2` 分区

$ sudo fdisk -l

Disk /dev/sda:931.5 GiB,1000204886016 字节,1953525168 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:135AABA1-1AB1-4C64-816B-28AEC718E091

设备 起点 末尾 扇区 大小 类型
/dev/sda1 2048 1050623 1048576 512M EFI 系统
/dev/sda2 1050624 1953523711 1952473088 931G Linux 文件系统

Disk /dev/sdb:2.7 TiB,3000592982016 字节,5860533168 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:0C98E626-D1C5-472F-AA76-E9BA7E8F2A39

设备 起点 末尾 扇区 大小 类型
/dev/sdb1 2048 3926556671 3926554624 1.8T Linux 文件系统
/dev/sdb2 3985162240 5860532223 1875369984 894.3G Linux 文件系统

格式化分区

$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.44.1 (24-Mar-2018)
/dev/sdb1 有一个 ext4 文件系统
创建于 Mon Feb 22 09:05:26 2021
无论如何也要继续?(y,N) y
创建含有 490819328 个块(每块 4k)和 122707968 个inode的文件系统
文件系统UUID:92e10b8f-eb9f-49e2-8678-31ba84c8ea26
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

正在分配组表: 完成
正在写入inode表: 完成
创建日志(262144 个块) 完成
写入超级块和文件系统账户统计信息: 已完成

$ sudo mkfs.ext4 /dev/sdb2
mke2fs 1.44.1 (24-Mar-2018)
创建含有 234421248 个块(每块 4k)和 58605568 个inode的文件系统
文件系统UUID:6938ad59-a5dc-4402-bebb-9551b11bbaad
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

正在分配组表: 完成
正在写入inode表: 完成
创建日志(262144 个块) 完成
写入超级块和文件系统账户统计信息: 已完成

挂载硬盘

$ sudo mount /dev/sdb1 /mnt/t31
$ sudo mount /dev/sdb2 /mnt/t32
$ sudo df -h
文件系统 容量 已用 可用 已用% 挂载点
udev 48G 0 48G 0% /dev
/dev/sda2 916G 660G 210G 76% /
/dev/sda1 511M 6.1M 505M 2% /boot/efi
/dev/sdb1 1.8T 77M 1.8T 1% /mnt/t31
/dev/sdb2 880G 77M 835G 1% /mnt/t32

设置开机自动挂载磁盘分区

1.执行如下命令,查询磁盘分区的UUID
# 以查询磁盘分区“/dev/vdb1”的UUID为例
blkid /dev/vdb1

2.使用VI编辑器打开“fstab”文件。
vi /etc/fstab

3.光标移至文件末尾,按“Enter”,添加如下内容
UUID=0b3040e2-1367-4abb-841d-ddb0b92693df /mnt/sdc ext4 defaults 0 2

云备份

华为云控制台->云硬盘备份,右上角“创建云硬盘备份”,在右侧云硬盘列表中找到当前云服务器的系统盘,根据指引完成系统盘备份

内存超限导致 `OOM killer` 问题

查看程序被 `kill` 的具体时间:

cd /var/log
sudo grep -r -i killed

Linux下有3种 `Overcommit` 的策略(参考内核文档:vm/overcommit-accounting),可以在 `/proc/sys/vm/overcommit_memory` 配置。取0,1和2三个值,默认是0。

0:启发式策略,比较严重的 `Overcommit` 将不能得逞,比如你突然申请了 128TB 的内存。而轻微的 `Overcommit` 将被允许。另外,`root` 能 `Overcommit` 的值比普通用户要稍微多些。

1:永远允许`Overcommit`,这种策略适合那些不能承受内存分配失败的应用,比如某些科学计算应用。

2:永远禁止`Overcommit`,在这个情况下,系统所能分配的内存不会超过swap+RAM*系数(`/proc/sys/vm/overcmmit_ratio`,默认50%,你可以调整),如果这么多资源已经用光,那么后面任何尝试申请内存的行为都会返回错误,这通常意味着此时没法运行任何新程序。

能否帮我设置成永久允许`overcommit`,因为我要做的就是科学计算应用。

OOM错误

echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p

磁盘挂载

使用命令查看磁盘分区

sudo fdisk -l
设备 Start 末尾 扇区 Size 类型
/dev/nvme0n1p1 2048 534527 532480 260M EFI System
/dev/nvme0n1p2 534528 567295 32768 16M Microsoft reserved
/dev/nvme0n1p3 567296 998164479 997597184 475.7G Microsoft basic data
/dev/nvme0n1p4 998166528 1000214527 2048000 1000M Windows recovery environment

设备 启动 Start 末尾 扇区 Size Id 类型
/dev/sda1 * 2048 136790015 136787968 65.2G 83 Linux
/dev/sda2 136792062 250068991 113276930 54G 5 扩展
/dev/sda5 136792064 138741759 1949696 952M 83 Linux
/dev/sda6 138743808 216866815 78123008 37.3G 83 Linux
/dev/sda7 216868864 250068991 33200128 15.9G 82 Linux 交换 / Solaris

根据提供的磁盘信息确定想挂载的磁盘,以及确定挂载的位置。我此次的目的是将`/dev/nvme0n1p3 ` (windows10的C:盘) 磁盘挂载到`/mnt/win10 ` 中去.

创建挂载目录

sudo mkdir /mnt/win10

开始挂载

sudo mount /dev/nvme0n1p3/ /mnt/win10/

设置开机自动挂载

u@T470:~$ sudo blkid /dev/nvme0n1p3

/dev/nvme0n1p3: LABEL=”Windows” UUID=”2C2CB6B02CB67504″ TYPE=”ntfs” PARTLABEL=”Basic data partition” PARTUUID=”494bc468-63d1-40a3-9230-97c33ed8b6cb”

从返回信息中获取 `UUID=2C2CB6B02CB67504`

修改自动挂载文件

u@T470:~$ sudo vim /etc/fstab
# 在文档末尾添加裹在磁盘的信息
# [UUID=************] [挂载磁盘分区] [挂载磁盘格式] 0 2
UUID=2C2CB6B02CB67504 /mnt/win10 ntfs defaults 0 2
# 第一个数字:0表示开机不检查磁盘,1表示开机检查磁盘;
# 第二个数字:0表示交换分区,1代表启动分区(Linux),2表示普通分区
# 我挂载的分区是在WIn系统下创建的分区,磁盘格式为ntfs

挂载vdi固态硬盘

# install nbd client
sudo apt install qemu-utils
sudo apt install nbd-server nbd-client qemu-kvm
# load the nbd kernel module
sudo modprobe nbd
# connect vdi file
sudo qemu-nbd –connect=/dev/nbd0 /media/u/5c/win7.vdi
# check disk partations
sudo fdisk -l /dev/nbd0
# mount partation
sudo mount /dev/nbd0p2 win/
# umount partation
sudo umount win/
qemu-nbd –disconnect /dev/nbd0

突然无法挂载win10

UBUNTU 16.04 平时可以正常访问WIN10系统的某个NTFS分区,因此这个 NTFS 分区上的各种文件、数据,对于WIN10 和 UBUNTU16.04 来说是共享的,最近突然出现无法挂载 WIN10 的 NTFS 分区.解决方法([Ref](https://blog.csdn.net/makercloud/article/details/84300921))

根本原因是,Windows 10关机或者睡眠后,其实并没有完全关机,而是将一些缓存保存在磁盘中,便于下一次开机快速启动,为了防止其他系统对缓存文件的更改,所以才会被拒绝挂载。

**解决方法**:打开控制面板,在电源管理中,选择关闭盖子的功能,更改不能更改的选项,去掉\textbf{快速启动}的钩。重新进入linux就可以啦!

sudo ntfsfix /dev/sdb1

挂载ntfs硬盘的权限问题

查看 `username` 的 `gid` 和 `uid`,例如

id liupei
uid=1000(liupei) gid=1000(liupei) groups=1000(liupei),998(wheel),991(lp),3(sys),90(network),98(power)

然后设置windows硬盘开机自动挂载

/dev/sda3 /mnt ntfs defaults,utf8,uid=1000,gid=1000,dmask=022,fmask=133 0 0

`utf8` :正确显示中文

`uid` : 本人

`dmask`: 文件夹权限

`fmask`: 文件权限

参考文献:[wgh100817](https://blog.csdn.net/WGH100817/article/details/101719786)

硬盘无法卸载

– 使用命令 fuser -m -v /dev/sda1 来查询哪些设备在用该硬盘

– kill掉这些设备的 pid 就可以了

参考来源:csdn

TOC