Linux设备管理与故障排除全解析
1. Linux设备相关基础问题
1.1 设备接口与通信方式
在Linux系统中,不同的硬件接口采用不同的通信方式与PC主板交互。例如,PCI接口使用中断、I/O端口和DMA通道进行通信,而USB接口则有其独特的通信协议。以下是相关的复习问题及答案:
| 问题 | 选项 | 答案 |
| — | — | — |
| 哪种硬件接口使用中断、I/O端口和DMA通道与PC主板通信? | A. USB
B. GPIO
C. PCI
D. Monitors
E. Printers | C |
| Linux系统使用哪个文件系统来跟踪与PCI板通信的端口? | A. /proc/ioports
B. /proc/interrupts
C. /sys
D. /dev
E. /proc/dma | A |
| Linux在哪里创建文件以直接与设备发送和接收数据? | A. /sys
B. /proc
C. /etc
D. /dev
E. /dev/mapper | D |
| 新创建的LVM卷对应的虚拟文件在虚拟目录的哪里可以找到? | A. /dev
B. /dev/mapper
C. /proc
D. /sys
E. /etc | B |
| 安装新PCI卡后出现设备冲突,用什么命令显示所有现有设备使用的中断、I/O端口和DMA通道? | A. lsdev
B. lsblk
C. lspci
D. lsusb
E. dmesg | C |
| 哪个Linux命令显示内核环形缓冲区的内容? | A. lsdev
B. lsblk
C. lspci
D. lsusb
E. dmesg | E |
| 哪些软件包实现了Linux中的X Windows图形系统?(选两个) | A. X.org
B. CUPS
C. Wayland
D. X11
E. udev | A、D |
| 连接新网络打印机需要确保安装哪个软件包? | A. X.org
B. CUPS
C. Wayland
D. X11
E. udev | B |
| 哪个程序在后台监控内核环形缓冲区消息以检测新设备? | A. X.org
B. CUPS
C. Wayland
D. X11
E. udev | E |
| 哪个程序允许重新加载检测和安装新设备的定义规则? | A. udevadm
B. udev
C. lsusb
D. lspci
E. lsdev | A |
1.2 存储问题常见情况分析
存储问题是Linux系统管理中常见的问题之一,以下是一些常见的存储问题及解决方法:
-
Degraded Storage/Mode
-
Degraded Storage
:存储介质由于时间或不当使用而逐渐衰退,导致数据退化或丢失。例如,SSD由于有限的程序/擦除(PE)周期,耐力有限,因此在交换空间中使用SSD是不明智的。
-
Degraded Mode
:RAID阵列中的一个或多个磁盘出现故障。可以使用
mdadm -D
命令查看特定阵列的详细状态,如果状态中包含“degraded”,则向阵列添加另一个分区以使其恢复。
-
Missing Devices
-
网络附加存储(NAS)
:首先检查网络连接。
-
本地连接设备
:如果
lsblk
等工具未显示设备,使用超级用户权限尝试
lspci -M
命令进行全面扫描。同时,确保设备文件(如
/dev/sdb
)可用且未损坏,必要时使用
mknod
命令重建。
-
Missing Volumes
:如果执行
pvscan
时提示“Couldn’t find device”,则表示存在丢失的卷。通常是由于磁盘故障或意外移除导致。可以使用LVM工具,如
pvcreate
、
vgcfgrestore
、
vgscan
和
vgchange
来解决。
-
Missing Mount Points
-
目录不存在
:使用
mkdir
命令创建缺失的挂载点目录。
-
bind选项问题
:如果使用
bind
选项移动文件系统的挂载点,确保文件系统已在其他地方挂载。在删除目录之前,使用
mountpoint directory-name
命令检查它是否为挂载点。
-
Storage Integrity
-
坏块检测
:除了使用
fsck
命令,还可以使用
badblocks
工具监控磁盘。在检查坏扇区之前,建议备份并卸载分区。使用
badblocks -nsv partition-device-file
命令进行无损测试。
-
制造商测试程序
:磁盘制造商通常提供自己的测试程序,可用于判断是否需要更换驱动器。
-
Performance Issues
-
监控工具
:可以使用
iostat
、
ioping
、
iotop
和
sar
等工具监控存储性能问题,也可以使用
hdparm
确定驱动器的读取速度。
-
dstat工具
:类似于
iostat
,但提供更多有用的数据,如网络使用或单个LV驱动器的吞吐量统计信息。
-
dmstats工具
:专门用于逻辑卷,可设置和管理设备映射器所记录设备的统计信息。可以使用
lsblk -p
确定与逻辑卷关联的设备映射器文件名。
-
GUI工具
:
gnome-disks
可用于评估磁盘性能,但在进行写基准测试之前,请备份磁盘数据。
-
Resource Exhaustion
-
资源耗尽情况
:系统可能会出现inode编号或磁盘空间耗尽的情况。
-
防范攻击
:可以通过在
/etc/security/limits.conf
文件中设置PAM nofile限制来防止文件描述符泄漏攻击。
1.3 存储问题处理流程
graph TD;
A[发现存储问题] --> B{问题类型};
B -->|Degraded Storage/Mode| C[使用mdadm -D查看状态并处理];
B -->|Missing Devices| D[检查网络或使用lspci -M扫描];
B -->|Missing Volumes| E[使用LVM工具恢复];
B -->|Missing Mount Points| F[创建挂载点或检查bind选项];
B -->|Storage Integrity| G[使用badblocks检测];
B -->|Performance Issues| H[使用监控工具分析];
B -->|Resource Exhaustion| I[设置PAM限制];
2. 特殊存储设备问题处理
2.1 旧存储设备问题检查
对于出现问题的旧存储设备,首先要检查设备制造商是否有新的驱动程序或固件可用,这通常可以解决一些棘手的问题。另外,要检查设备的Linux模块(驱动程序)是否已加载或内置于Linux内核中。可以按照以下步骤进行检查:
1. 使用
dmesg
工具获取线索,例如:
# dmesg | grep sde
[…]
[ 5.566479] sd 6:0:0:0: [sde] Attached SCSI disk
-
查看
/sys/目录中的SCSI磁盘驱动信息:
# ls /sys/bus/scsi/drivers
sd sr
# udevadm info -an /dev/sde | grep DRIVERS | grep sd
DRIVERS=="sd"
-
使用
lsmod命令检查驱动模块是否已加载:
# lsmod | grep sd
sd_mod 46322 5
[…]
# modinfo sd_mod
filename: /lib/modules/3.10.0-862.11.6.el7.x86_64/kernel/drivers/scsi/sd_mod.ko.xz
[…]
description: SCSI disk (sd) driver
[…]
- 如果模块未加载,检查是否内置于内核中:
$ cat /lib/modules/$(uname -r)/modules.builtin | grep sd_mod
kernel/drivers/scsi/sd_mod.ko
-
如果模块既未加载也未内置于内核中,使用
modprobe命令动态加载:
sudo modprobe sd_mod
2.2 SATA设备问题处理
2.2.1 内核版本问题
如果使用的Linux发行版内核版本早于2.6.16,SATA设备的挂起和恢复功能可能不受支持。可以通过内核补丁添加SATA电源管理支持来解决此问题。
2.2.2 频繁头加载和卸载问题
一些SATA设备可能由于频繁的头加载和卸载而提前失效,通常是由于激进的电源管理导致。可以按照以下步骤检查和解决:
1. 使用
smartctl -a
命令检查SATA驱动器的
Start_Stop_Count
:
smartctl -a device-filename
-
使用
hdparm -B命令确认是否存在激进的电源管理:
hdparm -B device-filename
- 如果确认存在问题,使用超级用户权限修改电源管理设置:
sudo hdparm -B 127 device-filename
2.3 SCSI框架问题处理
2.3.1 SCSI框架组成
SCSI框架由三个部分组成:
-
Upper
:设备驱动层(如磁盘驱动)
-
Middle
:SCSI路由层
-
Lower
:主机总线适配器(HBA)驱动层
2.3.2 驱动检查与启用
如果HBA或设备驱动未加载或内置于内核中,可能会出现问题。可以按照以下步骤检查和启用:
1. 使用
udevadm
命令确定HBA驱动:
# udevadm info -an /dev/sda | grep -i drivers
DRIVERS=="sd"
[…]
DRIVERS=="ahci"
[…]
-
使用
lsmod命令检查驱动是否已加载:
# lsmod | grep ahci
ahci 34056 3
[…]
# modinfo ahci
[…]
description: AHCI SATA low-level driver
[…]
-
当热插拔SATA驱动器时,需要启用它。可以通过重启系统或修改
/sys/class/scsi_host/host#/scan文件来实现。例如:
# lsblk -S
NAME HCTL TYPE VENDOR MODEL REV TRAN
[…]
sde 6:0:0:0 disk ATA VBOX HARDDISK 1.0 sata
[…]
# echo '- - -' > /sys/class/scsi_host/host6/scan
2.4 RAID问题处理
2.4.1 软件RAID
使用
mdadm -D
命令查看软件RAID阵列的详细状态,通过查看
/proc/mdstat
文件检查阵列状态。如果SATA驱动器离线导致阵列挂起,检查HBA驱动是否支持热插拔。
2.4.2 硬件RAID
使用超级用户权限执行
lspci -knn | grep "RAID bus controller"
命令获取硬件RAID控制器的信息,以便使用制造商的实用程序进行故障排除和监控。
2.5 应用程序权限问题处理
当用户运行应用程序时出现I/O错误,可能是权限问题。可以按照以下步骤进行排查:
1.
收集信息
- 确定运行应用程序的账户及其名称。
- 找出引发错误的具体程序操作。
- 获取应用程序进行读写或创建的文件的完整目录引用。
- 记录是否有其他尝试启动的应用程序。
- 记录应用程序尝试使用的本地或远程服务。
2.
权限检查
-
Ownership
:使用
ls -l
命令查看应用程序文件的所有者和权限,同时检查目录权限。
-
Group Memberships
:确定用户所属的组,检查应用程序文件和目录树的组权限。
-
Executables
:检查应用程序的执行权限,特别是当应用程序启动其他程序时。
-
Inheritance
:如果应用程序创建的文件无法访问,检查目录的默认ACL。可以使用
getfacl -d
或
--default
命令查看默认ACL,使用
setfacl
命令修改ACL。
2.6 应用程序权限问题排查流程
graph TD;
A[应用程序出现I/O错误] --> B[收集信息];
B --> C{是否为权限问题};
C -->|是| D[检查Ownership];
D --> E[检查Group Memberships];
E --> F[检查Executables];
F --> G[检查Inheritance];
G --> H[根据情况修改权限];
C -->|否| I[进一步排查其他问题];
2.7 应用程序权限问题练习
可以通过以下步骤进行基本的应用程序权限问题排查练习:
1. 使用非root账户通过tty终端登录Linux系统,并使用
sudo
命令获取超级用户权限。
2. 创建一个新文件:
touch /tmp/fileA.txt
- 将文件的所有者和组更改为root:
sudo chown root:root /tmp/fileA.txt
-
使用
nano编辑器创建一个小应用程序:
nano application.sh
在编辑器中输入以下内容:
#!/bin/bash
echo "Creating file /tmp/Activity.txt…"
echo "Hello World" > /tmp/Activity.txt
echo "Removing file…"
rm -ir /tmp/*.*
exit
-
保存并退出编辑器:
-
按
Ctrl+O,然后按Enter保存文件。 -
按
Ctrl+X退出编辑器。
-
按
- 运行应用程序:
bash activity.sh
-
按照提示输入
y并按Enter,记录出现的错误信息。 -
开始排查过程:
- 记录用户账户名称。
- 记录导致错误的操作。
- 记录问题文件的完整目录引用。
- 确认应用程序未尝试启动其他应用程序或使用本地/远程服务。
-
使用
ls -ld /tmp命令显示问题文件目录的所有权、组权限和其他权限。 - 记录目录的所有者、组和其他权限。
- 确定适用于用户账户的权限集并记录。
3. 总结与实践建议
3.1 常见问题总结
为了更清晰地回顾前面提到的各种Linux存储和应用程序权限问题,下面通过表格形式进行总结:
| 问题类型 | 具体情况 | 解决方法 |
| — | — | — |
| 存储问题 | Degraded Storage | 避免在交换空间使用SSD;使用
mdadm -D
查看RAID状态并添加分区恢复 |
| | Missing Devices(NAS) | 检查网络连接 |
| | Missing Devices(本地) | 使用
lspci -M
扫描,确保设备文件可用,必要时用
mknod
重建 |
| | Missing Volumes | 使用LVM工具(
pvcreate
、
vgcfgrestore
、
vgscan
、
vgchange
)恢复 |
| | Missing Mount Points(目录不存在) | 使用
mkdir
创建挂载点 |
| | Missing Mount Points(bind选项问题) | 确保文件系统已挂载,用
mountpoint
检查目录是否为挂载点 |
| | Storage Integrity | 使用
badblocks -nsv
检测坏块,参考制造商测试程序 |
| | Performance Issues | 使用
iostat
、
ioping
、
iotop
、
sar
、
hdparm
、
dstat
、
dmstats
等工具监控,用
gnome - disks
评估性能 |
| | Resource Exhaustion | 在
/etc/security/limits.conf
设置PAM nofile限制 |
| 应用程序权限问题 | Ownership | 使用
ls -l
查看文件和目录所有者及权限 |
| | Group Memberships | 确定用户组,检查文件和目录组权限 |
| | Executables | 检查应用程序执行权限 |
| | Inheritance | 使用
getfacl -d
或
--default
查看默认ACL,用
setfacl
修改 |
3.2 实践操作建议
在实际的Linux系统管理中,建议按照以下步骤进行操作,以确保系统的稳定运行:
1.
定期检查
:定期对存储设备进行全面检查,包括使用
smartctl
检查SATA设备的健康状态,使用
mdadm -D
查看RAID阵列状态等。
2.
备份数据
:在进行任何可能影响数据的操作之前,如修改分区、检查坏块等,务必备份重要数据。
3.
权限管理
:严格管理应用程序的权限,定期审查文件和目录的所有权、组权限和执行权限,避免权限漏洞。
4.
驱动更新
:及时更新存储设备的驱动程序和固件,以解决潜在的兼容性问题。
3.3 故障排除流程整合
为了更直观地展示故障排除的整体流程,下面给出一个mermaid格式的流程图:
graph LR;
A[系统出现问题] --> B{问题类型};
B -->|存储问题| C[按存储问题排查流程处理];
C --> D{是否解决};
D -->|是| E[问题解决];
D -->|否| F[进一步检查驱动和硬件];
B -->|应用程序权限问题| G[按应用程序权限问题排查流程处理];
G --> H{是否解决};
H -->|是| E;
H -->|否| F;
F --> I[联系专业人员或查阅更多资料];
I --> J[尝试其他解决方案];
J --> E;
3.4 操作步骤总结
为了方便大家在实际操作中参考,下面将前面提到的关键操作步骤整理成列表:
存储问题操作步骤
-
Degraded Mode(RAID)
:
-
使用
mdadm -D查看RAID阵列详细状态。 - 若状态含“degraded”,添加分区恢复。
-
使用
-
Missing Devices(本地)
:
-
使用
lspci -M扫描PCI设备。 -
确保设备文件可用,必要时用
mknod重建。
-
使用
-
Missing Volumes
:
-
执行
pvscan检查。 -
使用
pvcreate、vgcfgrestore、vgscan、vgchange恢复。
-
执行
-
Missing Mount Points(bind选项问题)
:
- 确保文件系统已挂载。
-
使用
mountpoint检查目录是否为挂载点。
-
Storage Integrity
:
-
使用
badblocks -nsv partition - device - file检测坏块。 - 参考制造商测试程序。
-
使用
-
SATA设备(频繁头加载和卸载)
:
-
使用
smartctl -a检查Start_Stop_Count。 -
使用
hdparm -B确认电源管理。 -
使用
hdparm -B 127 device - filename修改电源管理。
-
使用
-
SCSI热插拔设备
:
-
使用
lsblk -S确定设备主机号。 -
使用
echo '- - -' > /sys/class/scsi_host/host#/scan启用设备。
-
使用
应用程序权限问题操作步骤
-
收集信息
:
- 确定运行应用程序的账户。
- 找出引发错误的操作。
- 获取文件完整目录引用。
- 记录其他应用程序和服务使用情况。
-
权限检查
:
-
使用
ls -l检查文件和目录所有权和权限。 - 确定用户组,检查组权限。
- 检查应用程序执行权限。
-
使用
getfacl -d或--default查看默认ACL,用setfacl修改。
-
使用
3.5 总结
通过对Linux系统中存储问题和应用程序权限问题的详细分析和介绍,我们了解了常见问题的表现形式、原因及解决方法。在实际的系统管理中,我们需要根据具体情况,按照上述的操作步骤和流程进行故障排查和解决。同时,要养成定期检查和维护系统的习惯,以确保系统的稳定运行和数据的安全。希望本文能够帮助大家更好地管理和维护Linux系统。
超级会员免费看
500

被折叠的 条评论
为什么被折叠?



