磁盘存储、文件系统与网络管理指南
一、磁盘扫描与管理
1. 添加磁盘后立即生效方法
# 扫描新添加的磁盘
echo '- - -' > /sys/class/scsi_host/host0/scan # 根据实际情况调整host0/1/2
# Ubuntu多host处理
for i in {0..2}; do
echo '- - -' > /sys/class/scsi_host/host$i/scan
done
2. 磁盘使用流程
- 设备分区 – 划分磁盘空间
- 创建文件系统 – 格式化分区
- 挂载新文件系统 – 使分区可用
3. 核心磁盘命令
| 命令 | 功能描述 | 常用选项 |
|---|---|---|
dd |
读取、转换并输出数据 | if=输入文件, of=输出文件, ibs=输入块大小, obs=输出块大小, count=块数, skip=跳过输入块, seek=跳过输出块 |
df |
显示磁盘空间使用 | -h人类可读格式, -T文件系统类型, -iinode使用, --total总计信息 |
du |
显示文件/目录磁盘使用 | -h人类可读格式, -s仅显示总计, -c最后显示总计, -d指定深度, --max-depth最大深度 |
二、磁盘分区管理
1. 分区方案对比
| 特性 | MBR | GPT |
|---|---|---|
| 最大磁盘容量 | 2TB | 8ZB |
| 最大分区数 | 4主分区或3主+1扩展(N逻辑) | 128主分区 |
| 分区标识 | /dev/sda1-4(主), /dev/sda5+(逻辑) | /dev/sda1-/dev/sda128 |
| 技术背景 | 512字节MBR(446引导+64分区表) | 主+备份分区表 |
| 启动兼容性 | BIOS | UEFI |
2. MBR分区表操作
备份与恢复:
# 备份MBR分区表
mkdir /data
dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
# 光盘救援恢复步骤:
1. 开机按Esc或调整BIOS为CD-ROM启动
2. 选择"Rescue a Rocky Linux system"
3. 选择"Skip to shell"
4. 获取备份:scp root@10.0.0.157:~/dpt.img ./
5. 恢复:dd if=dpt.img of=/dev/sda bs=1 seek=446
6. 重启:reboot
fdisk交互命令:
fdisk /dev/sda
a切换启动标志d删除分区F列出空闲空间l列出已知分区类型n添加新分区p打印分区表t更改分区类型v验证分区表w写入并退出q不保存退出g创建新GPT分区表o创建新DOS分区表
3. GPT分区管理
gdisk操作:
gdisk /dev/nvme0n1
交互命令与fdisk类似
4. 分区查看命令
fdisk -l # 查看分区表(dos表示MBR)
lsblk # 树状显示块设备
hexdump -C -n 512 /dev/sda -v # 查看前512字节
三、文件系统管理
1. Linux文件系统类型
| 类型 | 特点 | 创建命令 |
|---|---|---|
| ext2 | 早期Linux文件系统 | mkfs.ext2 |
| ext3 | 带日志的ext2 | mkfs.ext3 |
| ext4 | 乌班图推崇 | mkfs.ext4 |
| xfs | rocky推崇 | mkfs.xfs |
| swap | 虚拟内存 | mkswap |
| iso9660 | 光盘文件系统 | – |
| btrfs | 高级文件系统 | mkfs.btrfs |
| reiserfs | 高效小文件存储 | mkfs.reiserfs |
2. 文件系统操作
# 查看分区文件系统
lsblk -f
# 创建文件系统
mkfs.ext4 /dev/sdb1
mkfs.xfs /dev/sdc1
3. 挂载管理
临时挂载:
mount /dev/sdb1 /mnt/data
umount /mnt/data # 或 umount /dev/sdb1
持久挂载(/etc/fstab):
# 格式:<设备> <挂载点> <类型> <选项> <备份> <检查>
# 根分区示例
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults 0 1
# 数据分区示例
UUID=1234-5678 /home/data ext4 defaults,noatime 0 2
# 设备名挂载示例
/dev/sdb1 /mnt/backup xfs defaults 0 0
# 虚拟文件系统
proc /proc proc defaults 0 0
# 生效命令
mount -a
mount -o remount /mountpoint # 重新挂载
查看挂载信息:
cat /etc/fstab
blkid # 查看UUID
四、文件系统异常修复
1. 修复流程
1. 卸载文件系统:umount /dev/sdX
2. 执行修复工具:fsck/xfs_repair
3. 重新挂载验证:mount /dev/sdX /mountpoint
2. 修复工具
ext系列修复(e2fsck):
e2fsck /dev/sdb1
-y自动回答yes-f强制修复-p自动安全修复
xfs修复(xfs_repair):
xfs_repair /dev/sdb1
-f修复文件而非设备-n只检查不修复-d允许修复只读挂载设备
3. 修复案例
场景:文件系统损坏
# 准备环境
rm -rf /mount ; mkdir /mount/ext -p
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /mount/ext/
cp /etc/fstab /mount/ext/f{1,2}
# 人为破坏
dd if=/dev/zero of=/dev/sdb1 bs=1M count=1
# 修复过程
umount /dev/sdb1
e2fsck /dev/sdb1
# 验证修复
mount /dev/sdb1 /mount/ext/
ls /mount/ext/
fstab错误处理:
# 注释错误条目
sed -i '/mount\/xfs/s@^@#@' /etc/fstab
# 检查修改
grep 'mount/xfs' /etc/fstab
# 重新挂载
systemctl daemon-reload
mount -a
mount | grep /mount
# 重启验证
reboot
五、SWAP管理
# 禁用SWAP
1. sed -i '/swap/s/^/#/' /etc/fstab # 注释配置
2. swapoff -a # 禁用所有swap
# 启用SWAP
1. sed -i '/swap/s/^#//' /etc/fstab # 取消注释
2. swapon -a # 启用所有swap
六、RAID技术
1. RAID级别对比
| 类型 | 最少磁盘 | 容错能力 | 特点 | 利用率 |
|---|---|---|---|---|
| RAID0 | 2 | 无 | 数据分块存储,提升性能 | 100% |
| RAID1 | 2 | 1盘 | 完全镜像 | 50% |
| RAID4 | 3 | 1盘 | 专用校验盘 | (n-1)/n |
| RAID5 | 3 | 1盘 | 分布式校验 | (n-1)/n |
| RAID6 | 4 | 2盘 | 双分布式校验 | (n-2)/n |
| RAID10 | 4 | 1组 | 先镜像后分条 | 50% |
| RAID01 | 4 | 1组 | 先分条后镜像 | 50% |
2. RAID创建示例
# 创建RAID5
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd{b,c,d}1
七、LVM逻辑卷管理
1. LVM结构
- PV(物理卷) – 物理磁盘/分区
- VG(卷组) – PV的集合(相当于大硬盘)
- LV(逻辑卷) – 从VG划分的逻辑分区
- PE(物理块) – 默认4M
- LE(逻辑块) – 默认4M
2. LVM操作命令
| 对象 | 命令 | 功能 |
|---|---|---|
| PV | pvcreate /dev/sdXn |
创建物理卷 |
pvdisplay |
显示物理卷信息 | |
pvremove |
移除物理卷 | |
| VG | vgcreate vg00 /dev/sdXn |
创建卷组 |
vgextend vg00 /dev/sdYn |
扩展卷组 | |
vgreduce vg00 /dev/sdXn |
缩小卷组 | |
| LV | lvcreate -L 10G -n lvdata vg00 |
创建逻辑卷 |
lvextend -L +5G /dev/vg00/lvdata |
扩展逻辑卷 | |
lvreduce -L 5G /dev/vg00/lvdata |
缩小逻辑卷 |
3. LVM创建流程
# 1. 准备磁盘(分区ID改为8e)
# 2. 创建物理卷
pvcreate /dev/sdb
# 3. 创建卷组
vgcreate vg_data /dev/sdb
# 4. 创建逻辑卷
lvcreate -L 20G -n lv_www vg_data
# 5. 创建文件系统
mkfs.xfs /dev/vg_data/lv_www
# 6. 挂载使用
mkdir /www
mount /dev/vg_data/lv_www /www
4. LVM扩容与缩减
EXT4扩容:
lvextend -L +5G /dev/vg_data/lv_db
resize2fs /dev/vg_data/lv_db
EXT4缩减:
umount /db
fsck -f /dev/vg_data/lv_db
resize2fs /dev/vg_data/lv_db 15G
lvreduce -L 15G /dev/vg_data/lv_db
mount -a
XFS扩容:
lvextend -L +5G -r /dev/vg_data/lv_www # -r自动调整文件系统
八、软件包管理
1. RPM/YUM (RedHat系)
RPM命令:
rpm -ivh package.rpm # 安装
rpm -e package # 卸载
rpm -qi package # 查询信息
rpm -ql package # 查询文件列表
rpm -qf /path/file # 查询文件所属包
YUM仓库配置:
# /etc/yum.repos.d/rocky.repo
[baseos]
name=Rocky Linux $releasever BaseOS
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
YUM命令:
yum repolist # 查看仓库列表
yum search keyword # 搜索包
yum list available # 查看可用包
yum install package # 安装包
yum provides */cmd # 查找命令所属包
yum --downloadonly --downloaddir=/path/ install package # 只下载不安装
yum clean all # 清除缓存
yum makecache # 重建缓存
2. DPKG/APT (Debian系)
DPKG命令:
dpkg -i package.deb # 安装
dpkg -r package # 移除
dpkg -p package # 完全移除(含配置)
dpkg -l # 列出已安装包
dpkg -l | grep nginx # 查找特定包
APT操作:
# 源配置:/etc/apt/sources.list
apt update # 更新缓存
apt install package # 安装
apt purge package # 完全移除
apt autoremove # 自动移除不需要的包
apt-cache madison nginx # 查看可用版本
# 彻底清理
apt purge ufw lxd lxd-client lxcfs liblxc-common
apt purge $(dpkg -l | grep '^rc' | awk '{print $2}')
九、网络诊断工具
tcpdump高级用法
基本选项:
-i指定接口-D列出可用接口-c捕获包数量-w写入文件-r读取文件-s设置包长度
过滤选项:
host指定主机port指定端口net指定网络src/dst源/目标地址and/or/not逻辑组合
输出选项:
-n不解析地址-v详细输出-X十六进制+ASCII输出-t不显示时间戳
示例:
tcpdump -i eth0 host 192.168.1.100
tcpdump tcp port 22
tcpdump -c 5 -w capture.pcap
tcpdump -r capture.pcap
十、系统管理技巧
1. Ubuntu桌面安装
apt install ubuntu-desktop -y
2. 搭建YUM仓库
yum -y install httpd
systemctl enable --now httpd
# 将仓库文件放入/var/www/html
3. 更改Ubuntu源
1. vim /etc/apt/sources.list
2. 替换为阿里云镜像
3. apt update
4. apt-cache policy package
4. 包管理器对比
| 操作 | RPM | YUM | DPKG | APT |
|---|---|---|---|---|
| 安装 | rpm -ivh |
yum install |
dpkg -i |
apt install |
| 移除 | rpm -e |
yum remove |
dpkg -r |
apt remove |
| 查询 | rpm -qa |
yum list |
dpkg -l |
apt list |
| 清缓存 | – | yum clean all |
– | apt clean |
十一、光盘自动挂载
# 1. 安装autofs
yum install -y autofs
# 2. 启动服务
systemctl start autofs
systemctl enable --now autofs
# 3. 配置autofs
# /etc/auto.master 添加:
/misc /etc/auto.misc
# /etc/auto.misc 添加:
cdrom -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
# 4. 创建挂载点
mkdir -p /misc/cdrom
十二、源码编译安装
1. 编译流程
./configure --prefix=/custom/path
make -j $(nproc) # 并行编译
make install
2. Nginx编译示例
# 1. 下载解压
tar xf nginx-1.25.3.tar.gz
cd nginx-1.25.3
# 2. 配置选项
./configure --prefix=/opt/nginx --with-http_ssl_module
# 3. 解决依赖
yum install -y gcc pcre-devel openssl-devel zlib-devel
# 4. 编译安装
make -j $(nproc)
make install
3. 创建systemd服务
# /etc/systemd/system/nginx.service
[Unit]
Description=NGINX Web Server
After=network.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/opt/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 生效命令
systemctl daemon-reload
systemctl start nginx
systemctl enable nginx
十三、网络配置
1. Rocky网卡配置
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
BOOTPROTO=static
ONBOOT=yes
生效命令:
nmcli connection reload
nmcli connection up eth0
2. Ubuntu网卡配置
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
生效命令:
netplan apply
3. 多网卡绑定
bonding模式:
# 创建bond0
nmcli connection add type bond con-name bond0 ifname bond0 mode active-backup
# 添加从属网卡
nmcli connection add type bond-slave ifname eth0 master bond0
nmcli connection add type bond-slave ifname eth1 master bond0
# 配置IP
nmcli connection modify bond0 ipv4.addresses 192.168.1.200/24 ipv4.gateway 192.168.1.1
nmcli connection up bond0
网络组模式:
# 创建team0
nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}'
# 添加从属网卡
nmcli connection add type team-slave con-name team0-eth0 ifname eth0 master team0
nmcli connection add type team-slave con-name team0-eth1 ifname eth1 master team0
# 配置IP
nmcli connection modify team0 ipv4.method manual ipv4.addresses 192.168.1.200/24
nmcli connection up team0
十四、网络协议
1. TCP三次握手

2. TCP四次挥手

TCP滑动窗口
TCP滑动窗口是TCP协议中的一种重要机制,用于控制、管理发送方和接收方之间的数据传输,是实现流量控制和拥塞控制的基础。
一、定义与结构
TCP滑动窗口是发送方和接收方之间的一种协议约定,由两个部分组成:
1. 发送窗口
表示可以连续发送的数据段范围,大小取决于网络状况和接收方能力:
- ✅ 已发送且已收到ACK确认的数据
(我已发我已收) - ⏳ 已发送但未收到ACK确认的数据
(我已发我未收) - 📤 未发送但可以发送的数据
(我未发你能收) - ⛔ 未发送也不可以发送的数据
(我未发你不收)
2. 接收窗口
表示可以接收的数据段范围,大小取决于接收方缓冲区大小和处理能力:
- ✅ 已成功接收并确认的数据
(等待应用进程读取,你已发我已收) - 📥 未收到数据但可以接收的数据
(你未发我能收) - ⛔ 未收到数据并不可以接收的数据
(你未发我不收)
二、工作原理
-
窗口滑动
- 接收方成功接收数据后窗口前移,通知发送方可发送更多数据
- 发送方收到ACK确认后发送窗口前移
-
流量控制
- 接收方通过调整窗口大小控制发送速率
- 缓冲区满时减小窗口 → 降低发送速率
- 缓冲区空时增大窗口 → 提高发送速率
-
提高传输效率
- 允许连续发送多个数据段(无需等待单个ACK确认)
三、关键参数与计算
1. 窗口大小
| 属性 | 说明 |
|---|---|
| TCP头部字段 | Window (16位) |
| 默认最大值 | 65,535字节 |
| 窗口缩放因子 | 最大14 (RFC 7323) |
| 理论最大尺寸 | 65,535 × 2<sup>14</sup> = 1,073,725,440字节 |
2. 关键指针
| 指针 | 含义 |
|---|---|
SND.UNA |
已发送未确认的首字节序列号 |
SND.NXT |
待发送数据的首字节序列号 |
RCV.NXT |
期望接收的下个数据字节序列号 |
四、应用与意义
- 实现动态流量控制与拥塞控制
- 确保数据传输可靠性
- 提高网络利用率(减少空闲等待时间)
- 降低传输延迟
流量控制实现机制
核心原理
通过控制发送窗口的 ⏳ 已发送但未收到ACK确认的数据 部分实现动态调节:
工作流程
-
接收窗口反馈
接收方通过TCP报文头的Window字段通告可用缓冲区大小 -
发送窗口调整
graph LR A[接收方减小窗口] --> B[发送方缩减待发数据区] B --> C[降低发送速率] D[接收方增大窗口] --> E[发送方扩展待发数据区] E --> F[提高发送速率] -
动态平衡
- 网络拥塞/接收方处理能力不足 → 窗口缩小 → 发送减速
- 网络通畅/接收方能力增强 → 窗口扩大 → 发送加速
传输过程类比(卡车运输示例)
| 批次 | 发送量 | 接收能力 | 结果 |
|---|---|---|---|
| 第一次 | 6件 | 5件 | ✅ 成功送达5件,1件滞留 |
| 第二次 | 6件 | 4件 | ✅ 送达4件+滞留1件=5件 |
| 第三次 | 4件 | 5件 | ✅ 成功送达4件 |
| 第四次 | 5件 | 5件 | ✅ 动态调整至最佳传输量 |