Linux服务器硬件配置查看与磁盘管理指南 1. 服务器基础配置查看指南作为系统管理员快速掌握服务器硬件配置是日常运维的基础技能。在Linux系统中我们主要通过命令行工具获取这些信息Windows系统则可以通过图形界面和命令行两种方式查看。1.1 CPU信息核查执行lscpu命令可以获取详细的CPU信息这个命令会输出包括CPU架构、核心数、线程数、型号名称等关键数据。对于需要了解CPU缓存大小、支持指令集等更专业信息的场景特别有用。$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 158 Model name: Intel(R) Core(TM) i7-7700HQ CPU 2.80GHz Stepping: 9 CPU MHz: 900.022 CPU max MHz: 3800.0000 CPU min MHz: 800.0000 BogoMIPS: 5616.00 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 6144K注意在虚拟化环境中lscpu显示的信息可能是虚拟化的结果不一定反映物理CPU的真实情况。此时需要结合虚拟化平台的管理工具获取宿主机的真实CPU信息。1.2 内存容量检查free -h命令以人类可读的格式显示系统内存使用情况包括物理内存和交换分区的总量、已用量和可用量。-h参数让输出以GB/MB为单位更直观。$ free -h total used free shared buff/cache available Mem: 15G 4.2G 8.1G 456M 3.2G 10G Swap: 2.0G 1.1G 916M对于需要更详细内存信息的场景可以查看/proc/meminfo文件$ cat /proc/meminfo MemTotal: 16266092 kB MemFree: 8507528 kB MemAvailable: 10583156 kB Buffers: 211656 kB Cached: 2461544 kB SwapCached: 126876 kB Active: 4590504 kB Inactive: 1970504 kB Active(anon): 3027824 kB Inactive(anon): 794136 kB Active(file): 1562680 kB Inactive(file): 1176368 kB ...1.3 磁盘空间分析df -h命令显示所有已挂载文件系统的磁盘空间使用情况是日常检查磁盘空间的首选工具。-h参数同样表示以人类可读格式显示。$ df -h Filesystem Size Used Avail Use% Mounted on udev 7.8G 0 7.8G 0% /dev tmpfs 1.6G 2.1M 1.6G 1% /run /dev/nvme0n1p2 457G 123G 311G 29% / tmpfs 7.8G 73M 7.7G 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/nvme0n1p1 511M 7.9M 504M 2% /boot/efi tmpfs 1.6G 44K 1.6G 1% /run/user/1000如果需要查看磁盘的物理信息可以使用lsblk命令它能显示磁盘的分区情况和挂载点$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 465.8G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot/efi ├─nvme0n1p2 259:2 0 464.3G 0 part / └─nvme0n1p3 259:3 0 976M 0 part [SWAP]1.4 网络配置确认ip addr或传统的ifconfig命令可以查看网络接口配置。现代Linux系统推荐使用ip命令$ ip addr 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp3s0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:1a:4b:38:22:9e brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic noprefixroute enp3s0 valid_lft 86389sec preferred_lft 86389sec inet6 fe80::21a:4bff:fe38:229e/64 scope link noprefixroute valid_lft forever preferred_lft forever要查看路由表信息可以使用ip route或route -n命令$ ip route default via 192.168.1.1 dev enp3s0 proto dhcp metric 100 192.168.1.0/24 dev enp3s0 proto kernel scope link src 192.168.1.100 metric 1001.5 系统版本和内核信息uname -a命令可以快速查看系统内核版本和架构信息$ uname -a Linux workstation 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux要查看Linux发行版的详细信息不同发行版有不同的方法。对于基于Debian的系统如Ubuntu可以查看/etc/os-release文件$ cat /etc/os-release NAMEUbuntu VERSION20.04.3 LTS (Focal Fossa) IDubuntu ID_LIKEdebian PRETTY_NAMEUbuntu 20.04.3 LTS VERSION_ID20.04 HOME_URLhttps://www.ubuntu.com/ SUPPORT_URLhttps://help.ubuntu.com/ BUG_REPORT_URLhttps://bugs.launchpad.net/ubuntu/ PRIVACY_POLICY_URLhttps://www.ubuntu.com/legal/terms-and-policies/privacy-policy VERSION_CODENAMEfocal UBUNTU_CODENAMEfocal对于Red Hat系系统如CentOS可以使用cat /etc/redhat-release或rpm -q centos-release命令。2. 磁盘挂载与管理实践磁盘挂载是服务器存储管理的基础操作正确的挂载方式能确保数据安全和系统稳定性。本节将详细介绍从磁盘识别到永久挂载的全过程。2.1 磁盘识别与分区当新磁盘接入服务器后首先需要确认系统是否识别到了该磁盘。使用lsblk命令可以查看所有块设备$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1.8T 0 disk nvme0n1 259:0 0 465.8G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot/efi ├─nvme0n1p2 259:2 0 464.3G 0 part / └─nvme0n1p3 259:3 0 976M 0 part [SWAP]上例中sda是新接入的1.8TB磁盘尚未分区。接下来使用fdisk或更现代的parted工具进行分区$ sudo fdisk /dev/sda Welcome to fdisk (util-linux 2.34). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-3907029167, default 2048): Last sector, /-sectors or /-size{K,M,G,T,P} (2048-3907029167, default 3907029167): Created a new partition 1 of type Linux and of size 1.8 TiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.重要提示在对生产环境的磁盘进行操作前务必确认目标磁盘设备名错误的操作可能导致数据丢失。可以通过磁盘大小、型号等特征进行多次确认。2.2 文件系统创建分区完成后需要在分区上创建文件系统。对于常规用途ext4是不错的选择$ sudo mkfs.ext4 /dev/sda1 mke2fs 1.45.5 (07-Jan-2020) Creating filesystem with 488378624 4k blocks and 122101760 inodes Filesystem UUID: 7a3e5b6d-7e1a-4f3d-9c8b-1e2d3f4a5b6c Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done对于需要更高性能或特定特性的场景可以考虑XFS文件系统$ sudo mkfs.xfs /dev/sda1 meta-data/dev/sda1 isize512 agcount4, agsize122094656 blks sectsz512 attr2, projid32bit1 crc1 finobt1, sparse1, rmapbt0 reflink1 data bsize4096 blocks488378624, imaxpct5 sunit0 swidth0 blks naming version 2 bsize4096 ascii-ci0, ftype1 log internal log bsize4096 blocks262144, version2 sectsz512 sunit0 blks, lazy-count1 realtime none extsz4096 blocks0, rtextents02.3 临时挂载与测试创建文件系统后可以先进行临时挂载测试$ sudo mkdir /mnt/data $ sudo mount /dev/sda1 /mnt/data挂载后可以使用df -h确认挂载是否成功$ df -h /mnt/data Filesystem Size Used Avail Use% Mounted on /dev/sda1 1.8T 77M 1.8T 1% /mnt/data还可以通过实际文件操作测试挂载点的读写功能$ sudo touch /mnt/data/testfile $ sudo ls -l /mnt/data total 16 -rw-r--r-- 1 root root 0 Feb 10 15:30 testfile drwx------ 2 root root 16384 Feb 10 15:28 lostfound2.4 配置永久挂载临时挂载在系统重启后会失效要确保磁盘在每次启动时自动挂载需要编辑/etc/fstab文件。首先获取分区的UUID$ sudo blkid /dev/sda1 /dev/sda1: UUID7a3e5b6d-7e1a-4f3d-9c8b-1e2d3f4a5b6c TYPEext4 PARTUUIDa1b2c3d4-01然后在/etc/fstab中添加一行配置UUID7a3e5b6d-7e1a-4f3d-9c8b-1e2d3f4a5b6c /mnt/data ext4 defaults 0 2配置项各字段含义如下UUID分区唯一标识挂载点目录路径文件系统类型挂载选项defaults表示默认选项(rw,suid,dev,exec,auto,nouser,async)dump备份标志0表示不备份fsck检查顺序0不检查1根分区2其他分区添加配置后可以使用mount -a测试配置是否正确该命令会挂载fstab中所有未挂载的文件系统$ sudo mount -a如果没有错误输出则表示配置正确。也可以使用systemctl daemon-reload让系统重新加载fstab配置。3. 高级存储配置技巧掌握了基础挂载操作后下面介绍一些提高存储管理效率和可靠性的高级技巧。3.1 使用LVM管理磁盘LVM(Logical Volume Manager)提供了更灵活的磁盘管理方式支持动态调整大小、快照、条带化等高级功能。配置LVM的基本步骤如下创建物理卷(PV)$ sudo pvcreate /dev/sda1 Physical volume /dev/sda1 successfully created.创建卷组(VG)$ sudo vgcreate vg_data /dev/sda1 Volume group vg_data successfully created创建逻辑卷(LV)$ sudo lvcreate -L 1T -n lv_data vg_data Logical volume lv_data created.在逻辑卷上创建文件系统并挂载$ sudo mkfs.ext4 /dev/vg_data/lv_data $ sudo mkdir /data $ sudo mount /dev/vg_data/lv_data /dataLVM的优势在于可以动态调整逻辑卷大小而无需重新分区。例如扩展逻辑卷$ sudo lvextend -L 500G /dev/vg_data/lv_data $ sudo resize2fs /dev/vg_data/lv_data3.2 磁盘性能优化根据使用场景调整挂载选项可以提升磁盘性能。一些常用的优化选项noatime不更新文件访问时间减少写操作nodiratime不更新目录访问时间datawritebackext4文件系统的日志模式提高性能但可能增加崩溃后数据丢失风险barrier0禁用写入屏障提高性能但降低安全性nobh不缓存buffer heads适用于高并发场景示例优化后的/etc/fstab条目UUID7a3e5b6d-7e1a-4f3d-9c8b-1e2d3f4a5b6c /data ext4 noatime,nodiratime,datawriteback 0 2对于数据库等对延迟敏感的应用可以考虑使用deadline或noop调度器$ echo deadline /sys/block/sda/queue/scheduler3.3 磁盘健康监控定期检查磁盘健康状况可以预防数据丢失。smartctl工具可以读取磁盘的SMART信息$ sudo smartctl -H /dev/sda smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-91-generic] (local build) Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org START OF READ SMART DATA SECTION SMART overall-health self-assessment test result: PASSED更详细的SMART信息$ sudo smartctl -A /dev/sda smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-91-generic] (local build) Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org START OF READ SMART DATA SECTION SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 0 3 Spin_Up_Time 0x0027 176 174 021 Pre-fail Always - 5825 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 45 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 ...可以设置定期SMART测试$ sudo smartctl -t short /dev/sda # 短测试 $ sudo smartctl -t long /dev/sda # 长测试3.4 多磁盘冗余配置对于关键数据建议使用RAID提供冗余。Linux内核支持软件RAID常见配置方法创建RAID1(镜像):$ sudo mdadm --create /dev/md0 --level1 --raid-devices2 /dev/sda1 /dev/sdb1 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store /boot on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.查看RAID状态$ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0] 1953382464 blocks super 1.2 [2/2] [UU] [....................] resync 0.1% (3036224/1953382464) finish179.6min speed180728K/sec bitmap: 15/15 pages [60KB], 65536KB chunk unused devices: noneRAID设备创建后可以像普通磁盘一样分区、创建文件系统并挂载。4. 常见问题与故障排除在实际操作中可能会遇到各种磁盘和挂载相关的问题。本节总结了一些常见问题及其解决方法。4.1 磁盘无法识别问题问题现象新接入的磁盘在lsblk中看不到。排查步骤检查物理连接是否正常查看内核日志是否有磁盘检测信息$ dmesg | grep -i sd [ 2.683047] sd 0:0:0:0: [sda] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB) [ 2.683052] sd 0:0:0:0: [sda] 4096-byte physical blocks [ 2.683149] sd 0:0:0:0: [sda] Write Protect is off [ 2.683152] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 2.683220] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesnt support DPO or FUA [ 2.683460] sda: sda1 [ 2.683768] sd 0:0:0:0: [sda] Attached SCSI disk检查SCSI总线是否识别到设备$ lsscsi [0:0:0:0] disk ATA WDC WD30EFRX-68E 0A82 /dev/sda对于NVMe设备检查PCI设备列表$ lspci | grep -i nvme 01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983解决方案如果是物理连接问题重新插拔磁盘对于虚拟机检查是否已正确添加虚拟磁盘检查磁盘控制器驱动是否加载4.2 挂载失败问题问题现象执行mount命令时提示各种错误如wrong fs type, bad option, bad superblock等。常见原因及解决文件系统损坏$ sudo fsck /dev/sda1 fsck from util-linux 2.34 e2fsck 1.45.5 (07-Jan-2020) /dev/sda1: clean, 11/122101760 files, 8893222/488378624 blocks不正确的文件系统类型确认/etc/fstab中指定的文件系统类型与实际一致挂载点不存在确保挂载点目录已创建挂载选项冲突特别是当磁盘之前以只读方式挂载过磁盘UUID变更如果磁盘被重新格式化UUID会改变需要更新/etc/fstab4.3 磁盘空间异常问题问题现象df显示磁盘已满但du统计实际文件大小却小很多。可能原因文件被删除但仍被进程占用小文件过多导致inode耗尽文件系统日志占用空间解决方法检查被删除但仍被占用的文件$ sudo lsof | grep deleted nginx 1234 root 5w REG 8,1 1073741824 1234 /var/log/nginx/access.log (deleted)检查inode使用情况$ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 122101760 123456 121978304 1% /data检查文件系统是否需要修复$ sudo tune2fs -l /dev/sda1 | grep -i mount count Mount count: 12 Maximum mount count: -14.4 性能问题排查问题现象磁盘I/O性能下降系统响应缓慢。排查工具iostat查看磁盘I/O统计$ iostat -x 1 Linux 5.4.0-91-generic (server) 02/10/2022 _x86_64_ (8 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 3.12 0.00 1.25 2.34 0.00 93.29 Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util sda 5.23 1.02 212.12 24.48 0.00 0.12 0.00 10.53 0.98 2.34 0.00 40.56 24.00 0.68 0.42关键指标%util设备利用率接近100%表示饱和await平均I/O等待时间(ms)svctm平均服务时间(ms)iotop查看进程级I/O使用情况$ sudo iotop Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s Current DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND 123 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [jbd2/sda1-8] 4567 be/4 mysql 0.00 B/s 0.00 B/s 0.00 % 0.00 % mysqld --daemonize --pid-file/run/mysqld/mysqld.piddmesg检查内核是否有I/O错误记录$ dmesg | grep -i error | grep -i sd [ 1234.567890] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyteDID_OK driverbyteDRIVER_SENSE [ 1234.567891] sd 0:0:0:0: [sda] tag#0 Sense Key : Medium Error [current] [ 1234.567892] sd 0:0:0:0: [sda] tag#0 Add. Sense: Unrecovered read error - auto reallocate failed优化建议对于高负载数据库考虑使用SSD或NVMe磁盘调整I/O调度器优化应用I/O模式减少随机小I/O增加内存减少交换空间使用