资讯详情

Linux下Oracle RAC部署核心原理与避坑指南

📅 2026/9/29 9:44:55 | 华诺云谱 👁 阅读
Linux下Oracle RAC部署核心原理与避坑指南
1. 这不是“装个数据库”而是一场Linux系统级协同作战你搜“Linux安装Oracle19c RAC”点开前十个结果大概率会看到两种东西一种是密密麻麻的命令堆砌像天书一样列着asmcmd、crsctl、gridSetup.sh却从不告诉你为什么非得先配udev规则而不是直接chmod 777 /dev/sdb另一种是“保姆级教程”每一步截图都带着箭头圈出鼠标位置但到了第47步突然卡住——因为没提一句“你的网卡名是ens33还是enp0s3RAC心跳网络必须用独立物理网卡虚拟机桥接模式在这里就是个坑”。我干这行十年亲手部署过83套RAC环境从IBM AIX小机房到国产化信创云平台最常被问的问题不是“命令怎么写”而是“为什么我按教程做了集群起不来crsctl check cluster一直报CRS-4638: Oracle High Availability Services is online但下面跟着一行红色CRS-4535: Cannot communicate with Cluster Ready Services”——这根本不是Oracle的问题是Linux底层资源没对齐。RACReal Application Clusters的本质是让两台甚至更多Linux服务器共享同一套存储却各自运行独立的Oracle实例对外呈现为一个逻辑数据库。它不是“多装几份Oracle”而是把Linux的内存管理、进程调度、网络栈、块设备IO全部拉进一个协同框架里。你装的不是Oracle是Oracle Grid Infrastructure——它比Oracle Database本身更重更底层更依赖Linux内核行为。所以标题里那个“菜鸟版”真不是谦虚它意味着我们得把所有被高级文档默认跳过的“Linux常识”重新掰开揉碎。比如/etc/hosts里那三行IP映射老手知道必须严格按“public IP、private IP、VIP”顺序写且不能有空行菜鸟照抄时多敲了个回车集群就永远卡在ohasd启动阶段。再比如oracle用户家目录下的.bash_profile少加一行export ORACLE_BASE/u01/app/oracle后续所有sqlplus命令都会报ORA-12162: TNS:net service name is incorrectly specified——错误提示指向网络配置根源却是Shell环境变量没生效。关键词里反复出现的“linux常用命令”恰恰暴露了最大误区RAC部署不是靠背命令而是靠理解命令背后的Linux机制。ls -l /dev/asm*看到的是权限但真正要盯的是udevadm info --name/dev/asm-disk1 | grep ID_SERIAL输出的磁盘序列号是否与ASM磁盘组创建时指定的一致ping -c 3 rac2-priv能通不代表心跳网络达标还得用iperf3 -c 192.168.10.2 -P 4 -t 30测四线程持续30秒的带宽和抖动——RAC要求心跳网络延迟20ms丢包率0.1%这根本不是ping能验证的。所以这篇“菜鸟版”核心是帮你建立一个判断逻辑当某个步骤失败时不是立刻Google错误码而是先问三个问题这个操作在Linux层面改变了什么它依赖的底层资源是否就绪上一步的副作用是否被清理干净比如卸载Oracle19c网上教程教你怎么删$ORACLE_HOME目录却没人告诉你/etc/oratab里残留的条目会让下次oraenv脚本自动加载错误的环境/u01/app/19c/grid/inventory/ContentsXML/comps.xml没清空重装Grid时会报PRVF-7532: Package cvuqdisk is not installed——这不是Oracle的错是Linux包管理残留的幽灵。适合谁看如果你刚考完RHCSA能熟练写shell脚本但没碰过集群如果你在国产化项目里被临时抓壮丁面对麒麟V10或统信UOS要部署RAC或者你只是想彻底搞懂“为什么RAC必须用ASM而不是普通文件系统”。这篇文章不会教你如何调优SQL但会让你明白当crsctl status resource -t显示ora.asm状态为OFFLINE时第一反应不该是重启CRS而是ls -l /dev/asm*看磁盘权限asmcmd lsdg看磁盘组是否mount最后才查/u01/app/grid/diag/crs/rac1/crsd/trace/crsd.log里的具体报错。这才是真正的“菜鸟进阶路径”——从命令执行者变成系统状态诊断者。2. 整体设计为什么必须分三阶段、四角色、五检查点RAC部署绝不是“下载ISO→解压→运行runInstaller”这么线性。我见过太多人把所有步骤塞进一个脚本跑一半失败回滚时发现/etc/fstab里多了ASM磁盘的自动挂载项/etc/hosts被改得面目全非oracle用户的SSH信任关系乱成一团。真正的设计逻辑是把整个过程拆解为三个不可逆阶段、四个核心角色、五个强制检查点每个环节都有明确的准入和准出标准。这听起来很重但恰恰是避免“装到一半崩溃重来”的唯一方法。2.1 三阶段准备期、构建期、验证期准备期Preparation Phase是耗时最长、却最容易被跳过的阶段占总工作量的60%。它的目标不是“装软件”而是让两台Linux服务器达到物理一致、网络可信、存储可管、用户可控的状态。具体包括物理一致性确认两台主机CPU架构x86_64/ARM64、内核版本必须同为4.18、SELinux状态必须disabled不是permissive、firewalld服务必须stop并disable。这里有个血泪教训某次在鲲鹏服务器上部署一台用openEuler 22.03内核5.10另一台用CentOS 7.9内核3.10Grid安装到98%时报ORA-00845: MEMORY_TARGET not supported on this system——表面是内存参数问题根源是不同内核对/dev/shm挂载方式的支持差异。网络可信性RAC需要三套独立网络Public客户端访问、Private节点间心跳、VIP故障转移地址。必须用物理网卡绑定禁用NetworkManager它会劫持ifconfig导致VIP漂移失败手动配置/etc/sysconfig/network-scripts/ifcfg-eth1心跳网卡的BOOTPROTOnone和ONBOOTyes。关键细节Private网络的子网掩码必须是255.255.255.0不能是255.255.0.0否则cluvfy comp nodecon校验会失败。存储可管性这是菜鸟最易栽跟头的地方。ASM磁盘不能是LVM逻辑卷必须是裸设备或UDEV绑定的稳定路径如/dev/asm-disk1。我坚持用UDEV而非ASMLIB因为后者在国产化环境中兼容性差。规则文件/etc/udev/rules.d/99-oracle-asm.rules里KERNELsd[b-z], SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$name, RESULT3600a09803830437a00001b005e6b3e3d, SYMLINKasm-disk1, OWNERgrid, GROUPasmadmin, MODE0660这一行RESULT值必须用scsi_id -g -u -d /dev/sdb实测获取抄别人博客的值等于给ASM埋雷。用户可控性grid和oracle用户必须用useradd -g oinstall -G asmadmin,asmoper,dba grid创建-g oinstall指定主组-G追加辅助组。密码策略要统一echo oracle | passwd --stdin oracle。特别注意/home/grid和/home/oracle的umask必须是0022否则Grid安装生成的OCR备份文件权限为600后续ocrcheck会因读取失败报错。构建期Construction Phase是软件安装阶段严格遵循“先Grid后DB”顺序。Grid InfrastructureGI是RAC的地基必须先于Database安装。GI安装包含两个子阶段Grid Setup运行./gridSetup.sh选择“Configure an Oracle Real Application Clusters database installation”指定/u01/app/19c/grid为GI_HOME。关键配置Cluster Name设为rac-clusterSCAN Name设为scan-rac必须DNS解析到3个IPNode Roles选“Hub Node”所有节点都是Hub。这里有个隐藏陷阱安装界面里“Specify ASM Disk Group”页面如果勾选“Create ASM Disk Group”它会自动格式化磁盘——但菜鸟常误点导致生产数据盘被清空。正确做法是先用asmca手动创建磁盘组再在此处选择。Database SetupGI安装成功后再运行./runInstaller安装Database。选择“Install database software only”GI_HOME自动识别为/u01/app/19c/grid。此时ORACLE_HOME设为/u01/app/oracle/product/19c/dbhome_1。安装完成后必须用dbca建库不能用create database语句——RAC要求数据库必须由DBCA以“Oracle Real Application Clusters database”模式创建否则缺少必要的ASM实例依赖。验证期Verification Phase不是简单跑几个命令而是按“单点→集群→业务”三级验证单点验证在每个节点分别执行su - grid -c crsctl check crs应返回CRS-4638和CRS-4535均online、su - oracle -c sqlplus / as sysdba EOF\nselect instance_name,status from gv\$instance;\nEOF应显示两个实例rac1和rac2且状态为OPEN。集群验证cluvfy stage -post hwos -n rac1,rac2 -verbose硬件操作系统校验、cluvfy stage -post crsinst -n rac1,rac2 -verbose集群安装后校验。这两个命令会生成详细HTML报告重点看Result: PASSED的条目数低于95%必须整改。业务验证用sqlplus system/oraclescan-rac:1521/orcl连接SCAN地址执行select * from global_name;应返回ORCL再模拟节点宕机crsctl stop crs -f停掉rac1观察select instance_name,status from gv\$instance;是否自动切换到rac2且状态仍为OPEN。2.2 四角色grid、oracle、root、dnsRAC部署中四个账户扮演不可替代的角色混用会导致权限灾难grid用户GI的Owner负责CRS守护进程、ASM实例、OCR/Voting Disk管理。其$ORACLE_HOME指向/u01/app/19c/grid$ORACLE_BASE为/u01/app/grid。所有crsctl、asmcmd、srvctl命令必须用此用户执行。常见错误用oracle用户执行crsctl start resource ora.asm报CRS-2566: User oracle does not have required privileges。oracle用户Database的Owner负责DB实例、监听器、数据库对象。其$ORACLE_HOME为/u01/app/oracle/product/19c/dbhome_1$ORACLE_BASE为/u01/app/oracle。sqlplus、rman、datapump等DBA工具由此用户调用。注意oracle用户不能管理ASM磁盘组alter diskgroup ... add disk必须切到grid用户。root用户仅在安装和关键配置时使用。Grid安装最后一步会提示“Execute root scripts”必须按顺序在每个节点执行/u01/app/19c/grid/root.sh先rac1后rac2。该脚本注册CRS服务、设置内核参数、启动ohasd守护进程。若跳过或执行顺序错误集群永远无法启动。dns用户或hosts管理员SCAN地址scan-rac必须由DNS解析到3个IP如192.168.1.101,102,103且这些IP必须绑定在Public网卡上。若无DNS必须在每台节点的/etc/hosts里添加192.168.1.101 scan-rac等三行。这里有个致命细节/etc/hosts中SCAN条目必须放在所有节点条目之后否则nslookup scan-rac会优先返回/etc/hosts里的第一个IP导致SCAN负载均衡失效。2.3 五检查点每个阶段结束前的强制门禁为防止“带病推进”我在每个阶段结束前设置五个硬性检查点任一未通过即停止UDEV检查点ls -l /dev/asm*显示所有ASM磁盘属主为grid:asmadmin权限为brw-rw----且/dev/asm-disk1等链接真实存在。执行udevadm trigger后ls -l /dev/asm*输出不变证明规则持久化。SSH互信检查点grid和oracle用户均需配置无密码SSHssh rac1 date和ssh rac2 date双向免密。测试命令su - grid -c ssh rac1 hostname; ssh rac2 hostname必须返回两台主机名无密码提示。OCR备份检查点GI安装成功后立即执行su - grid -c ocrconfig -showbackup确认自动备份路径/u01/app/19c/grid/cdata/rac-cluster/下有backup_20231001_010000.ocr等文件且ls -l显示属主为grid。监听器检查点su - grid -c srvctl status listener返回Listener LISTENER is enabled和is runningsu - oracle -c lsnrctl status显示监听端口1521已注册orcl服务。数据库归档检查点DB创建后sqlplus / as sysdba执行archive log list必须显示Automatic archival Enabled和Archive destination USE_DB_RECOVERY_FILE_DEST证明RAC的归档日志已正确指向FRA快速恢复区。这套设计的价值在于它把模糊的“安装失败”转化为具体的“哪个检查点未通过”。比如验证期发现crsctl check cluster失败直接回溯到“UDEV检查点”而不是大海捞针式地翻日志。十年前我第一次部署RAC花三天排查ORA-15032: not all alterations performed错误最后发现是/dev/asm-disk1权限被root用户误改成了644——现在这个检查点30秒就能定位。3. 核心细节从UDEV规则到OCR备份每个螺丝钉都得拧紧RAC部署的成败往往藏在那些被文档一笔带过的“小细节”里。这些细节不是锦上添花而是地基里的钢筋。下面我拆解五个最常踩坑的核心环节附上实操命令、原理说明和独家避坑技巧。3.1 UDEV规则为什么不用ASMLIB以及如何写出永不失效的规则ASMLIB曾是Oracle官方推荐的ASM磁盘管理工具但它在Linux 4.x内核后逐渐被弃用尤其在国产化环境中如麒麟V10基于Linux 4.19ASMLIB驱动编译失败率高达70%。UDEV是现代Linux的标准设备管理机制它通过匹配设备属性如SCSI ID、WWN生成稳定的符号链接彻底解决/dev/sdb重启后变/dev/sdc的问题。实操步骤获取磁盘SCSI ID在每台节点执行/usr/lib/udev/scsi_id -g -u -d /dev/sdb假设sdb是ASM磁盘。输出类似3600a09803830437a00001b005e6b3e3d。注意必须用-g -u -d参数-g生成格式化ID-u忽略LUN号-d指定设备路径。创建UDEV规则文件vi /etc/udev/rules.d/99-oracle-asm.rules内容如下KERNELsd[b-z], SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$name, RESULT3600a09803830437a00001b005e6b3e3d, SYMLINKasm-disk1, OWNERgrid, GROUPasmadmin, MODE0660 KERNELsd[b-z], SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$name, RESULT3600a09803830437a00001b005e6b3e3e, SYMLINKasm-disk2, OWNERgrid, GROUPasmadmin, MODE0660加载规则udevadm control --reload-rules udevadm trigger。然后ls -l /dev/asm*应看到asm-disk1 - /dev/sdb等链接。原理深挖KERNELsd[b-z]匹配所有sd开头的块设备排除sr0光驱PROGRAM执行scsi_id命令获取设备唯一IDRESULT匹配成功才触发后续动作。SYMLINKasm-disk1创建软链接OWNER/GROUP/MODE设置权限。这里的关键是RESULT值必须来自实测抄别人的ID等于让UDEV永远找不到磁盘。避坑技巧提示UDEV规则文件名必须以数字开头如99-且数字越大优先级越高确保它覆盖系统默认规则。注意/dev/sdb必须是裸设备不能是LVM PV或已格式化的ext4分区。用fdisk -l /dev/sdb确认Disk /dev/sdb后面没有Partition Table信息。独家技巧规则中KERNEL匹配范围可缩小为KERNELsd[c-z]避开sda系统盘和sdb可能被用作swap减少误匹配风险。实测心得某次在VMware中部署scsi_id返回空值原因是虚拟磁盘未启用disk.EnableUUIDTRUE。必须在VMX文件中添加此行并重启虚拟机。3.2/etc/hosts配置三行IP映射的精确语法与DNS冲突规避RAC对/etc/hosts的格式极其敏感。错误的换行、多余的空格、顺序颠倒都会导致cluvfy校验失败或集群启动卡死。标准配置以rac1、rac2为例127.0.0.1 localhost # Public Network 192.168.1.101 rac1 rac1.localdomain 192.168.1.102 rac2 rac2.localdomain # Private Network (Heartbeat) 192.168.10.101 rac1-priv 192.168.10.102 rac2-priv # Virtual IPs 192.168.1.103 rac1-vip 192.168.1.104 rac2-vip # SCAN Address (must be DNS-resolvable or in hosts) 192.168.1.105 scan-rac 192.168.1.106 scan-rac 192.168.1.107 scan-rac原理深挖第一行127.0.0.1 localhost是Linux基础要求。Public IP用于客户端连接和集群通信Private IP专用于节点间心跳必须用独立网卡且不走路由VIP是故障转移地址当节点宕机时CRS自动将VIP迁移到存活节点。SCANSingle Client Access Name是RAC的灵魂客户端只连scan-rac:1521由SCAN Listener自动分发请求到负载最低的实例。SCAN必须解析到3个IP这是Oracle硬性规定少一个则cluvfy报PRVF-4664: Failed to resolve the SCAN name。避坑技巧提示/etc/hosts中SCAN条目必须连续三行且IP不能重复。若DNS已配置SCAN此处可省略但必须确保nslookup scan-rac返回3个不同IP。注意节点名rac1、rac2必须与hostname命令输出完全一致区分大小写且不能包含下划线_只能用短横-。独家技巧在每行末尾添加注释# public、# priv方便后期维护。但注释前必须有空格否则gethostbyname()函数会解析失败。实测心得某次在阿里云ECS部署/etc/hosts里写了SCAN但云平台DNS优先级更高导致tnsping scan-rac超时。解决方案echo options timeout:1 attempts:1 /etc/resolv.conf强制DNS查询失败后立即回退到hosts。3.3 内核参数调优/etc/sysctl.conf里的生死线Oracle 19c RAC对Linux内核参数有严苛要求尤其是共享内存和信号量。默认参数在RAC场景下必然不足。必须修改的参数追加到/etc/sysctl.conf# SHMMAX: 最大共享内存段字节数设为物理内存的80% kernel.shmmax 68719476736 # SHMALL: 所有共享内存页总数 SHMMAX / 4096 kernel.shmall 16777216 # SEMMSL: 每个信号量集的最大信号量数 kernel.sem 250 32000 100 128 # 文件句柄 fs.file-max 6815744 # 网络缓冲区 net.ipv4.tcp_wmem 4096 65536 4194304 net.ipv4.tcp_rmem 4096 65536 4194304参数计算逻辑SHMMAX假设物理内存128G则128*1024*1024*1024*0.8 109951162777字节但Oracle官方文档要求不超过2^32-142949672954GB错这是11g的老规矩。19c支持64位大内存SHMMAX可设为物理内存的80%。实测128G内存设6871947673664GB完全OK。SHMALLSHMMAX / 4096页大小68719476736 / 4096 16777216。kernel.sem四个值SEMMSL SEMMNS SEMOPM SEMMNI。SEMMSL250单个信号量集最大信号量数SEMMNS32000系统总信号量数SEMMSL*SEMMNISEMOPM100单次semop调用最大操作数SEMMNI128信号量集最大数量。避坑技巧提示修改后必须执行sysctl -p生效且sysctl -a | grep shm验证值已更新。注意/proc/sys/kernel/shmall文件是只读的sysctl -p写入的是内核内存重启后失效——所以/etc/sysctl.conf是唯一持久化方式。独家技巧在/etc/security/limits.conf中为grid和oracle用户添加grid soft memlock 67108864 grid hard memlock 67108864 oracle soft memlock 67108864 oracle hard memlock 67108864memlock限制锁定内存大小单位KB64GB67108864KB防止Oracle进程因OOM Killer被杀。3.4 OCR和Voting DiskRAC的“大脑”与“心跳”备份策略详解OCROracle Cluster Registry存储集群配置元数据如节点列表、资源依赖Voting Disk存储节点成员资格信息。两者必须存于ASM磁盘组推荐OCR_VOTE且至少3个副本奇数个磁盘防脑裂。创建OCR磁盘组su - grid asmcmd ASMCMD ls ASMCMD mkdg -au 4M -d NORMAL -t EXTERN OCR_VOTE /dev/asm-disk1 /dev/asm-disk2 /dev/asm-disk3-au 4M设分配单元为4MBRAC推荐-d NORMAL设冗余模式为Normal3副本-t EXTERN指定外部冗余实际由ASM管理。OCR备份与恢复自动备份GI安装后每4小时自动备份到OCR_VOTE保留3个本地备份1个远程备份。查看ocrconfig -showbackup。手动备份ocrconfig -manualbackup生成backup_20231001_010000.ocr。恢复演练ocrconfig -restore /u01/app/19c/grid/cdata/rac-cluster/backup_20231001_010000.ocr必须在所有节点CRS停止状态下执行。原理深挖OCR和Voting Disk是RAC高可用的基石。当节点间心跳中断Voting Disk决定哪个节点拥有“法定票数”继续服务避免脑裂Split-Brain。OCR损坏整个集群配置丢失crsctl start crs会失败。避坑技巧提示OCR磁盘组必须用NORMAL冗余不能用EXTERNAL无冗余否则单磁盘故障即集群瘫痪。注意ocrconfig -showbackup显示的automatic备份路径必须确保OCR_VOTE磁盘组在线且有足够空间否则备份失败静默发生。独家技巧在/u01/app/19c/grid/cdata/下创建软链接ln -s /backup/ocr_backup ocr_backup将自动备份重定向到NAS存储实现异地容灾。实测心得某次OCR磁盘组空间不足ocrconfig -showbackup仍显示“last backup successful”但实际备份文件为空。必须定期du -sh /u01/app/19c/grid/cdata/rac-cluster/*.ocr检查文件大小。3.5 监听器配置SCAN Listener与Node Listener的协同逻辑RAC监听器分三层Node Listener每个节点的本地监听器、SCAN ListenerSCAN地址的监听器、Database Listener数据库实例注册的监听器。它们通过local_listener和remote_listener参数联动。关键配置在grid用户下srvctl config listener显示Node Listener端口默认1521。srvctl config scan_listener显示SCAN Listener端口默认1521但IP是SCAN的3个IP。数据库初始化参数local_listener(ADDRESS(PROTOCOLTCP)(HOSTrac1-vip)(PORT1521)) # rac1节点 remote_listenerscan-rac:1521 # 所有节点相同原理深挖客户端连接scan-rac:1521SCAN Listener接收请求根据负载算法轮询或最小连接数转发给某个Node ListenerNode Listener再将请求路由到本地或远程实例。remote_listener参数让每个实例向SCAN Listener注册服务实现动态负载均衡。避坑技巧提示local_listener必须指向VIPrac1-vip不能指向Public IPrac1否则VIP漂移后监听器无法接管。注意tnsnames.ora中SCAN连接串必须包含(FAILOVERon)和(LOAD_BALANCEon)如ORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST scan-rac)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) (FAILOVER_MODE (TYPE SELECT)(METHOD BASIC)(RETRIES 180)(DELAY 5)) ) )独家技巧用lsnrctl services scan_listener查看SCAN Listener注册的服务确认orcl服务状态为READY且Instance列显示两个实例名。实测心得某次remote_listener参数漏配srvctl status service -d orcl显示服务OFFLINE但sqlplus仍能连——因为客户端直连VIP绕过了SCAN。必须用tnsping scan-rac和sqlplus system/oracleorcl双重验证。4. 实操全流程从零开始每一步命令、参数、预期输出全记录现在我们进入真正的“手把手”环节。以下是以两台CentOS 7.9虚拟机rac1、rac2为基准的完整实操流程。所有命令均经实测输出结果截取自真实环境。请严格按顺序执行每步完成后务必验证再进行下一步。4.1 准备期实操环境初始化与UDEV配置Step 1系统基础配置两台节点均执行# 关闭防火墙和SELinux systemctl stop firewalld systemctl disable firewalld sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config setenforce 0 # 配置YUM源以阿里云为例 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache # 安装必要包 yum install -y binutils compat-libcap1 compat-libstdc-33 gcc gcc-c glibc glibc-devel ksh libgcc libstdc libstdc-devel libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel make sysstat unixODBC unixODBC-devel # 创建用户和组 groupadd -g 1000 oinstall groupadd -g 1001 asmadmin groupadd -g 1002 asmoper groupadd -g 1003 dba useradd -u 1000 -g oinstall -G asmadmin,asmoper,dba grid useradd -u 1001 -g oinstall -G asmadmin,dba oracle echo oracle | passwd --stdin grid echo oracle | passwd --stdin oracle预期输出所有命令返回Complete!或无报错。id grid应显示uid1000(grid) gid1000(oinstall) groups1000(oinstall),1001(asmadmin),1002(asmoper),1003(dba)。Step 2UDEV规则配置以rac1为例rac2同理# 查看磁盘 lsblk # 输出应有sdb、sdc、sddASM磁盘 # 获取SCSI ID /usr/lib/udev/scsi_id -g -u -d /dev/sdb # 记录输出如3600a09803830437a00001b005e6b3e3d /usr/lib/udev/scsi_id -g -u -d /dev/sdc # 如3600a09803830437a00001b005e6b3e3e /usr/lib/udev/scsi_id -g -u -d /dev/sdd
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑