ubuntu26.04从ext4到raid1+lvm启动-最终版-有这个方法系统损坏还焦虑个啥

bash 复制代码
setup_raid1_lvm-new.sh


#!/bin/bash

# ==============================================================================
# Ubuntu 26.04 RAID1 + LVM 启动配置脚本
# 警告:此脚本将清除目标磁盘所有数据!请务必确认磁盘标识无误。
# 适用场景:Ubuntu Server Live USB 环境
# ==============================================================================

set -e

# --------------------------
# 1. 用户配置区域 (请根据实际情况修改)
# --------------------------
DISK1="/dev/sdb"       # 第一块物理硬盘
DISK2="/dev/sdc"       # 第二块物理硬盘
HOSTNAME="ubuntu-raid" # 主机名
USERNAME="ubuntu"      # 默认用户名
PASSWORD="ubuntu"      # 默认密码 (安装后请立即修改)
TIMEZONE="Asia/Shanghai"

# EFI 分区大小 (MB)
EFI_SIZE=512
# Boot 分区大小 (MB, BIOS模式需要, UEFI模式下/boot通常合并到根或单独ext4)
# 本脚本采用 UEFI + GPT 标准方案:
# /dev/md0: EFI System Partition (镜像同步, 虽非必须但便于管理) -> 实际上EFI通常不做RAID, 这里我们做两个独立EFI
# /dev/md1: /boot (ext4, RAID1)
# /dev/md2: LVM PV (RAID1), 包含 root (/) 和 swap

# --------------------------
# 2. 环境检查与准备
# --------------------------
echo "[*] 检查是否以 root 运行..."
if [ "$EUID" -ne 0 ]; then
    echo "请使用 sudo 运行此脚本"
    exit 1
fi

echo "[*] 安装必要工具..."
apt-get update
apt-get install -y mdadm lvm2 grub-efi-amd64 shim-signed dosfstools

# --------------------------
# 3. 磁盘分区 (GPT)
# --------------------------
wipe_disks() {
    echo "[!] 正在清除磁盘 $DISK1 和 $DISK2 上的所有数据..."
    sgdisk --zap-all $DISK1
    sgdisk --zap-all $DISK2
    partprobe $DISK1
    partprobe $DISK2
}

create_partitions() {
    echo "[*] 创建分区表..."
    
    # 定义分区方案 (单位: MiB)
    # 1. EFI 分区 (512M) - 类型 EF00
    # 2. Boot 分区 (1G)   - 类型 FD00 (Linux RAID)
    # 3. Root/LVM 分区 (剩余空间) - 类型 FD00 (Linux RAID)

    for DISK in $DISK1 $DISK2; do
        echo "[*] 分区 $DISK ..."
        sgdisk $DISK \
            --new=1:1M:+${EFI_SIZE}M --typecode=1:EF00 --change-name=1:"EFI" \
            --new=2:0:+1G --typecode=2:FD00 --change-name=2:"Boot" \
            --new=3:0:0 --typecode=3:FD00 --change-name=3:"RootLVM" \
            --print
    done
    partprobe $DISK1
    partprobe $DISK2
}

# --------------------------
# 4. 组建 RAID1 阵列
# --------------------------
setup_raid() {
    echo "[*] 组建 RAID1 阵列..."
    
    # 停止可能存在的旧阵列
    mdadm --stop /dev/md0 || true
    mdadm --stop /dev/md1 || true
    mdadm --stop /dev/md2 || true

    # 创建 /boot 的 RAID1 (md1)
    mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=1.2 \
        ${DISK1}2 ${DISK2}2
    
    # 创建 LVM 物理卷基础的 RAID1 (md2)
    mdadm --create /dev/md2 --level=1 --raid-devices=2 --metadata=1.2 \
        ${DISK1}3 ${DISK2}3

    echo "[*] 等待 RAID 同步初始化..."
    sleep 5
    cat /proc/mdstat
}

# --------------------------
# 5. 配置 LVM
# --------------------------
setup_lvm() {
    echo "[*] 配置 LVM..."
    
    # 创建物理卷
    pvcreate /dev/md2
    
    # 创建卷组
    vgcreate vg_root /dev/md2
    
    # 创建逻辑卷
    # Swap: 8G (根据内存调整)
    lvcreate -L 1G -n lv_swap vg_root
    # Root: 剩余所有空间
    lvcreate -l 100%FREE -n lv_root vg_root
    
    # 格式化
    mkfs.ext4 /dev/md1          # /boot
    mkfs.ext4 /dev/vg_root/lv_root # /
    mkswap /dev/vg_root/lv_swap
}

# --------------------------
# 6. 挂载文件系统并安装基础系统
# --------------------------
install_system() {
    echo "[*] 挂载文件系统..."
    mount /dev/vg_root/lv_root /mnt
    mkdir -p /mnt/boot
    mount /dev/md1 /mnt/boot
    
    # 处理 EFI 分区 (UEFI 模式下,EFI 分区通常不做 RAID,而是分别挂载)
    mkdir -p /mnt/boot/efi
    # 注意:GRUB 在 UEFI 下通常只需要一个 EFI 分区有效,但为了冗余,我们可以格式化其中一个并挂载
    # 这里我们格式化 DISK1 的 EFI 分区作为主 EFI
    mkfs.vfat -F32 ${DISK1}1
    mount ${DISK1}1 /mnt/boot/efi

    echo "[*] 开始安装基础系统 (debootstrap)..."
    # 使用 debootstrap 安装最小化系统
    # 如果是在 Live USB 中,通常使用 ubuntu-server-installer 或 subiquity
    # 此处演示手动 chroot 安装核心包,实际生产建议使用官方 Installer 的 "Manual Partitioning" 模式
    # 由于手动 debootstrap 极其复杂且易错,以下代码仅为结构示意,
    # **强烈建议**在 Live 环境中使用 `ubuntu-desktop-installer` 或 `subiquity` 的手动分区功能
    
    echo "[!] 警告:全自动脚本安装完整 Ubuntu 系统极其复杂且依赖网络源稳定性。"
    echo "[!] 建议操作:重启进入图形化安装程序,选择 'Manual Storage Configuration',"
    echo "[!] 按照上述分区和 RAID/LVM 结构手动挂载。"
    
    # 若坚持命令行安装,需执行 debootstrap,此处省略具体包列表以防错误
    # debootstrap jammy /mnt http://archive.ubuntu.com/ubuntu/
	
}

# --------------------------
# 7. 配置 Chroot 环境 (系统安装后执行)
# --------------------------
configure_chroot() {
    echo "[*] 配置 Chroot 环境..."
    
    # 挂载必要虚拟文件系统
    mount --bind /dev /mnt/dev
    mount --bind /proc /mnt/proc
    mount --bind /sys /mnt/sys
    mount --bind /run /mnt/run

    # 复制 resolv.conf
    cp /etc/resolv.conf /mnt/etc/resolv.conf

    chroot /mnt /bin/bash <<EOF
set -e
echo "[*] 在 Chroot 环境中配置..."

# 1. 安装内核和必要工具
apt-get update
apt-get install -y linux-image-generic linux-headers-generic mdadm lvm2 grub-efi-amd64 shim-signed os-prober

# 2. 生成 fstab
echo "生成 /etc/fstab..."
# 获取 UUID
BOOT_UUID=\$(blkid -s UUID -o value /dev/md1)
ROOT_UUID=\$(blkid -s UUID -o value /dev/mapper/vg_root-lv_root)
EFI_UUID=\$(blkid -s UUID -o value ${DISK1}1)
SWAP_UUID=\$(blkid -s UUID -o value /dev/mapper/vg_root-lv_swap)

cat > /etc/fstab <<FSTAB
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=\$EFI_UUID /boot/efi vfat umask=0077 0 1
UUID=\$BOOT_UUID /boot ext4 defaults 0 1
UUID=\$ROOT_UUID / ext4 errors=remount-ro 0 1
UUID=\$SWAP_UUID none swap sw 0 0
FSTAB

# 3. 配置 Hostname 和 Hosts
echo "$HOSTNAME" > /etc/hostname
cat > /etc/hosts <<HOSTS
127.0.0.1 localhost
127.0.1.1 $HOSTNAME
HOSTS

# 4. 配置网络 (Netplan)
cat > /etc/netplan/00-installer-config.yaml <<NETPLAN
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
NETPLAN

# 5. 安装 GRUB
echo "安装 GRUB..."
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck
update-grub

# 6. 更新 Initramfs (确保包含 raid 和 lvm 模块)
update-initramfs -u -k all

# 7. 设置用户
useradd -m -s /bin/bash $USERNAME
echo "$USERNAME:$PASSWORD" | chpasswd
usermod -aG sudo $USERNAME

echo "[*] Chroot 配置完成。"
EOF

    # 卸载虚拟文件系统
    umount /mnt/dev
    umount /mnt/proc
    umount /mnt/sys
    umount /mnt/run
}

# --------------------------
# 主执行流程
# --------------------------
main() {
    echo "=================================================="
    echo " Ubuntu 26.04 RAID1 + LVM 部署脚本"
    echo "=================================================="
    read -p "警告:这将擦除 $DISK1 和 $DISK2 的所有数据!继续吗?(yes/no): " confirm
    if [ "$confirm" != "yes" ]; then
        echo "已取消。"
        exit 0
    fi

    wipe_disks
    create_partitions
    setup_raid
    setup_lvm
    
    echo "[*] 分区和 RAID/LVM 结构已创建完毕。"
    echo "[*] 接下来请挂载文件系统并安装操作系统。"
    echo "[*] 您可以选择:"
    echo "    1. 重启并使用图形化安装器的'手动分区'功能,识别已创建的 /dev/md* 和 /dev/mapper/*。"
    echo "    2. 继续运行本脚本的 install_system (需完善 debootstrap 逻辑)。"
    
    # 自动执行 chroot 配置部分通常需要系统文件已存在,因此这里暂停
    # configure_chroot 
}

# 取消注释以下行以执行(谨慎!)
main

14:07 2026-8-27

磁盘常用操作

grub配置文件

--hint='lvmid/EE7WOZ-fRB3-0xEF-wL5a-0crV-5ILu-1UunrU/vFamX7-szAH-AMaJ-NqnY-ODja-cQHm-jmpPML' 4a9d0ef9-ebfc-4285-b910-b2b44182ce56

vgdisplay/lvdisplay得到的名称 后面跟的是blkid 根文件系统的uuid

--hint='mduuid/bd11fa5a5c8c7297362f27d118fabbe0' 93e7ee72-33fb-4f54-83d3-cebc4b4f8192

根据blkid 得到的sdb2 分区uuid 后面的是 md1的uuid

如果修改了vg和lv名称,grub可以手动更改

root@ccyy:~# ls /dev/mapper/

control vg_root_new-lv_root_new vg_root_new-lv_swap

替换掉

vg_root-lv_root 改成 vg_root_new-lv_root_new

删除之前的记录

mdadm --stop /dev/md0

假设成员盘为 /dev/sdb1 和 /dev/sdc1

mdadm --zero-superblock /dev/sdb2

‌检查磁盘元数据‌:

mdadm --examine /dev/sdb2

echo ""> /etc/mdadm/mdadm.conf

update-initramfs -u

dd if=/dev/sda1 of=sdb1

停用vg

vgchange -an vg_name

激活

vgchange -ay vg_name

vgchange -ay 激活全部

清除lvm清除残留元数据

wipefs -a /dev/sdb

1. 停用所有逻辑卷 (Logical Volumes)

lvchange -an /dev/vg_name/lv_name

或者停用卷组中的所有逻辑卷

vgchange -an vg_name

2. 导出卷组 (可选,用于迁移或彻底清理)

vgexport vg_name

3. 移除卷组 (如果目的是彻底删除 LVM 结构)

vgremove vg_name

4. 移除物理卷标记

pvremove /dev/md0

以上是常用操作命令,用于维护使用

更换源

sudo apt install --reinstall ubuntu-keyring

sudo tee /etc/apt/sources.list.d/ubuntu.sources > /dev/null <<EOF

Types: deb

URIs: https://mirrors.aliyun.com/ubuntu/

Suites: resolute resolute-updates resolute-backports resolute-security

Components: main restricted universe multiverse

Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

EOF

sudo apt update

sudo tee /etc/apt/sources.list.d/ubuntu.sources > /dev/null <<EOF

Types: deb

URIs: https://mirrors.ustc.edu.cn/ubuntu/

Suites: resolute resolute-updates resolute-backports resolute-security

Components: main restricted universe multiverse

Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

EOF

sudo apt update

???

Get:46 https://mirrors.ustc.edu.cn/ubuntu resolute-security/multiverse amd64 c-n-f Metadata 120 B

Error: Release file for https://mirrors.ustc.edu.cn/ubuntu/dists/resolute-updates/InRelease is not valid yet (invalid for another 1h 59min 21s). Updates for this repository will not be applied.

root@ccyy:~#

!!!!

启用 NTP 自动同步

sudo timedatectl set-ntp true

如果上述命令无效,可以手动强制同步(需要安装 ntpdate)

sudo apt install ntpdate -y

sudo ntpdate pool.ntp.org

查看当前时区

timedatectl

如果时区不对,设置为上海时间

sudo timedatectl set-timezone Asia/Shanghai

sudo debootstrap \

--arch=amd64 \

--components=main,universe \

--include=ubuntu-minimal \

resolute \

/mnt \

https://mirrors.ustc.edu.cn/ubuntu/

https://mirrors.aliyun.com/ubuntu/

执行完创建分区后

!!!

echo ""> /etc/mdadm/mdadm.conf

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

cp /etc/mdadm/mdadm.conf /mnt/etc/mdadm/mdadm.conf

更新3个

grub-install /dev/sdb

更新 grub 配置文件

update-grub

‌更新 initramfs‌

确保内核启动时能加载 mdadm 模块并识别阵列:

bash

update-initramfs -u

sudo rsync -avxHAX --progress / /mnt/

如果中途重启,重新挂载目标分区

mount /dev/vg_root/lv_root /mnt

mount /dev/md1 /mnt/boot

mount /dev/sdb1 /mnt/boot/efi

挂载 /proc (提供内核和进程信息)

mount -t proc /proc /mnt/proc

挂载 /sys (提供系统和硬件设备信息)

mount -t sysfs /sys /mnt/sys

挂载 /dev (提供设备节点,如 /dev/sdb)

mount --bind /dev /mnt/dev

挂载 /dev/pts (伪终端支持,可选但推荐)

mount --bind /dev/pts /mnt/dev/pts

挂载 /run (运行时变量数据,某些现代系统需要)

mount --bind /run /mnt/run

mount --bind /dev /mnt/dev

mount --bind /proc /mnt/proc

mount --bind /sys /mnt/sys

mount --bind /run /mnt/run

mount --bind /dev/pts /mnt/dev/pts

#这个很重要不然无法显示

mount -t efivarfs efivarfs /mnt/sys/firmware/efi/efivars

sudo chroot /mnt /bin/bash

验证环境

ls /proc/cpuinfo # 如果有输出,说明 /proc 挂载成功

ls /sys/block # 如果有输出,说明 /sys 挂载成功

设置root账号和密码,和当前密码

配置ssh

安装chroot内软件

apt install lvm2

apt install mdadm

apt-get install --reinstall grub-efi-amd64 shim-signed

apt-get install grub-pc-bin

???

chroot无内核文件

!!!use

apt install --reinstall linux-image-generic linux-headers-generic

ls -l /boot/vmlinuz* /boot/initrd.img*

!!!use!!!

sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck

update-initramfs -u -k all

grub-install /dev/sdb

update-grub

1. 更新 GRUB 配置文件

update-grub

2. 重新安装 GRUB 到磁盘

对于 UEFI 系统:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck

对于传统 BIOS (Legacy) 系统:

grub-install /dev/sda # 注意是磁盘设备名,不是分区

如果是 BIOS/Legacy 模式:

确保安装了 grub-pc-bin

apt-get install grub-pc-bin

grub-install /dev/sdb

grub-install /dev/sdc # RAID1 建议两块盘都装

update-grub

确保 /boot/efi 已挂载

mount /dev/sdb1 /boot/efi # 假设 sdb1 是 EFI 分区

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck

update-grub

use!!!重要!!!!

更改root密码

开启ssh,允许root登录

拷贝网络模板/etc/netplan/conf可以先复制到根目录

更新源

sudo tee /etc/apt/sources.list.d/ubuntu.sources > /dev/null <<EOF

Types: deb

URIs: https://mirrors.ustc.edu.cn/ubuntu/

Suites: resolute resolute-updates resolute-backports resolute-security

Components: main restricted universe multiverse

Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

EOF

sudo apt update

umount /mnt/dev

umount /mnt/proc

umount /mnt/sys

umount /run /mnt/run

umount /mnt/dev/pts /mnt/dev/pts

umount /mnt/sys/firmware/efi/efivars

备份系统文件!!!

cd /mnt

root@ccyy:/mnt# tar -czvf ../ubuntu26.04-root.tar.gz ./*

安装 grub 到物理磁盘 MBR/EFI

apt install grub2-common

grub-install /dev/sdb

???

root@ccyy:/# grub-install /dev/sdb

grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.

!!!

这个错误表明你正在尝试以 ‌BIOS (Legacy)‌ 模式安装 GRUB(因为默认目标是 i386-pc),但系统中缺少对应的 BIOS 引导模块文件。

结合你之前提到的 ‌Ubuntu 26.04 + RAID1 + LVM‌ 环境,这通常由以下两种情况之一引起:

‌你实际上是在 UEFI 模式下启动的‌(现代电脑默认),但命令没加参数,导致 GRUB 试图按 BIOS模式安装却找不到文件。

‌你确实需要 BIOS 模式‌,但只安装了 EFI 版的 GRUB 包,缺少 grub-pc-bin。

请按照以下步骤排查并修复:

第一步:确认当前启动模式

在终端运行以下命令:

bash

-d /sys/firmware/efi && echo "UEFI Mode" || echo "BIOS/Legacy Mode"

情况 A:如果是 UEFI Mode(绝大多数现代系统)

‌不要‌使用 grub-install /dev/sdb。你需要指定 EFI 目标平台和 EFI 分区挂载点。

‌确保 EFI 分区已挂载‌

假设你的 EFI 分区是 /dev/sdb1(根据你之前的脚本,应该是 sdb1),且已挂载到 /boot/efi:

bash

mount /dev/sdb1 /boot/efi

‌安装正确的 GRUB 包‌

!!!这个使用!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

bash

apt-get update

apt-get install --reinstall grub-efi-amd64 shim-signed

‌执行正确的安装命令‌

bash

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck

注意:这里不需要指定 /dev/sdb,而是指定 EFI 目录。

‌更新配置‌

bash

update-grub

情况 B:如果是 BIOS/Legacy Mode

如果你确实在旧电脑或强制 Legacy 模式下运行,你需要安装 BIOS 版的 GRUB 模块。

‌安装缺失的 BIOS 模块包‌

报错提示缺少 i386-pc/modinfo.sh,这是因为没装 grub-pc-bin。

bash

apt-get update

apt-get install grub-pc-bin

‌重新执行安装命令‌

bash

grub-install /dev/sdb

注意:在 RAID1 环境下,建议对两块盘都执行:

bash

grub-install /dev/sdb

grub-install /dev/sdc

‌更新配置‌

bash

update-grub

针对 RAID1 + LVM 环境的特别提示

由于你使用的是 ‌RAID1 + LVM‌,在执行 grub-install 之前,请务必确认以下几点,否则即使安装成功也可能无法启动:

‌Initramfs 必须包含 RAID 和 LVM 驱动‌

在 chroot 环境中,确保执行了:

bash

update-initramfs -u -k all

如果 initramfs 里没有 mdadm 和 lvm2 模块,内核启动后找不到根文件系统,会进入 (initramfs) 救援模式。

‌GRUB 能否识别 RAID?‌

‌UEFI 模式‌:GRUB 直接读取 EFI 分区(通常是独立的 ext4 或 FAT32,不在 RAID 内,或者在 RAID1 的 md1 上)。如果你的 /boot 在 RAID1 (/dev/md1) 上,GRUB 通常能正常读取,因为 GRUB 2 支持 MD RAID 1。

‌BIOS 模式‌:GRUB 的核心镜像需要写入磁盘的 MBR。在 RAID1 中,你需要确保两块盘的 MBR 都有 GRUB 代码(如上所述,对 sdb 和 sdc 都执行 install)。

‌验证安装结果‌

安装完成后,检查 EFI 引导项(仅 UEFI):

bash

efibootmgr -v

确保看到 ubuntu 的引导项指向正确的 .efi 文件。

总结解决方案

如果是 ‌UEFI‌(推荐):运行 grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu

如果是 ‌BIOS‌:先运行 apt install grub-pc-bin,再运行 grub-install /dev/sdb

《《《《《《《《《《《《《《《《《《《《《《《《《《《《》》》》》》》》》》》》》》》》》》》》》》》》》》》》

???

root@ccyy:/# efibootmgr -v

EFI variables are not supported on this system.

error trace:

apt-get install --reinstall grub-efi-amd64 shim-signed

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck

update-grub

efibootmgr -v

如果在chroot

假设目标系统根分区挂载在 /mnt

mount -t efivarfs efivarfs /mnt/sys/firmware/efi/efivars

root@ccyy:/# efibootmgr -v

BootCurrent: 0004

Timeout: 0 seconds

BootOrder: 0004,0000,0002,0001,0003

Boot0000* UiApp FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(462caa21-7614-4503-836e-8ab6f4662331)

dp: 04 07 14 00 c9 bd b8 7c eb f8 34 4f aa ea 3e e4 af 65 16 a1 / 04 06 14 00 21 aa 2c 46 14 76 03 45 83 6e 8a b6 f4 66 23 31 / 7f ff 04 00

Boot0001* UEFI VBOX HARDDISK VB25171e8a-798a13b2 PciRoot(0x0)/Pci(0xd,0x0)/Sata(1,65535,0){auto_created_boot_option}

dp: 02 01 0c 00 d0 41 03 0a 00 00 00 00 / 01 01 06 00 00 0d / 03 12 0a 00 01 00 ff ff 00 00 / 7f ff 04 00

data: 4e ac 08 81 11 9f 59 4d 85 0e e2 1a 52 2c 59 b2

Boot0002* UEFI VBOX HARDDISK VB95d3d5fb-46abb0a0 PciRoot(0x0)/Pci(0xd,0x0)/Sata(0,65535,0){auto_created_boot_option}

dp: 02 01 0c 00 d0 41 03 0a 00 00 00 00 / 01 01 06 00 00 0d / 03 12 0a 00 00 00 ff ff 00 00 / 7f ff 04 00

data: 4e ac 08 81 11 9f 59 4d 85 0e e2 1a 52 2c 59 b2

Boot0003* UEFI VBOX HARDDISK VB46040f02-cb470435 PciRoot(0x0)/Pci(0xd,0x0)/Sata(2,65535,0){auto_created_boot_option}

dp: 02 01 0c 00 d0 41 03 0a 00 00 00 00 / 01 01 06 00 00 0d / 03 12 0a 00 02 00 ff ff 00 00 / 7f ff 04 00

data: 4e ac 08 81 11 9f 59 4d 85 0e e2 1a 52 2c 59 b2

Boot0004* Ubuntu HD(1,GPT,442bf13f-3e13-4e98-9f47-6ef28ae0b3fc,0x800,0x219800)/\EFI\ubuntu\shimx64.efi

dp: 04 01 2a 00 01 00 00 00 00 08 00 00 00 00 00 00 00 98 21 00 00 00 00 00 3f f1 2b 44 13 3e 98 4e 9f 47 6e f2 8a e0 b3 fc 02 02 / 04 04 34 00 5c 00 45 00 46 00 49 00 5c 00 75 00 62 00 75 00 6e 00 74 00 75 00 5c 00 73 00 68 00 69 00 6d 00 78 00 36 00 34 00 2e 00 65 00 66 00 69 00 00 00 / 7f ff 04 00

?????

root@ccyy:/boot/efi# grub-install /dev/sdb

Installing for x86_64-efi platform.

grub-install: warning: EFI variables cannot be set on this system.

grub-install: warning: You will have to complete the GRUB setup manually.

Installation finished. No error reported.

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck

update-grub

okok!!!

poweroff

删除旧系统硬盘,只留,raid1的两个硬盘,启动

root@ccyy:~# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

sda 8:0 0 12G 0 disk

├─sda1 8:1 0 512M 0 part /boot/efi

├─sda2 8:2 0 1G 0 part

│ └─md1 9:1 0 1022M 0 raid1 /boot

└─sda3 8:3 0 10.5G 0 part

└─md2 9:2 0 10.5G 0 raid1

├─vg_root-lv_root 252:0 0 9.5G 0 lvm /

└─vg_root-lv_swap 252:1 0 1G 0 lvm SWAP

sdb 8:16 0 12G 0 disk

├─sdb1 8:17 0 512M 0 part

├─sdb2 8:18 0 1G 0 part

│ └─md1 9:1 0 1022M 0 raid1 /boot

└─sdb3 8:19 0 10.5G 0 part

└─md2 9:2 0 10.5G 0 raid1

├─vg_root-lv_root 252:0 0 9.5G 0 lvm /

└─vg_root-lv_swap 252:1 0 1G 0 lvm SWAP

sr0 11:0 1 1024M 1 rom

root@ccyy:~# df -h

Filesystem Size Used Avail Use% Mounted on

tmpfs 188M 1.1M 186M 1% /run

/dev/mapper/vg_root-lv_root 9.3G 5.2G 3.7G 59% /

tmpfs 468M 0 468M 0% /dev/shm

efivarfs 256K 13K 239K 5% /sys/firmware/efi/efivars

none 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service

none 1.0M 0 1.0M 0% /run/credentials/systemd-resolved.service

/dev/md1 988M 184M 737M 20% /boot

/dev/sda1 511M 13M 499M 3% /boot/efi

tmpfs 468M 0 468M 0% /tmp

none 1.0M 0 1.0M 0% /run/credentials/systemd-networkd.service

none 1.0M 0 1.0M 0% /run/credentials/getty@tty1.service

tmpfs 94M 8.0K 94M 1% /run/user/0

更新 grub 配置文件

update-grub

‌更新 initramfs‌

确保内核启动时能加载 mdadm 模块并识别阵列:

bash

update-initramfs -u

修改grub

root@ccyy:/dev/disk/by-id# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

sda 8:0 0 25G 0 disk

├─sda1 8:1 0 1G 0 part /boot/efi

├─sda2 8:2 0 2G 0 part /boot

└─sda3 8:3 0 21.9G 0 part

└─ubuntu--vg-ubuntu--lv 252:0 0 11G 0 lvm /

sdb 8:16 0 12G 0 disk

├─sdb1 8:17 0 512M 0 part /mnt/boot/efi

├─sdb2 8:18 0 1G 0 part

│ └─md1 9:1 0 1022M 0 raid1 /mnt/boot

└─sdb3 8:19 0 10.5G 0 part

└─md2 9:2 0 10.5G 0 raid1

├─vg_root-lv_swap 252:1 0 1G 0 lvm

└─vg_root-lv_root 252:2 0 9.5G 0 lvm /mnt

sdc 8:32 0 12G 0 disk

├─sdc1 8:33 0 512M 0 part

├─sdc2 8:34 0 1G 0 part

│ └─md1 9:1 0 1022M 0 raid1 /mnt/boot

└─sdc3 8:35 0 10.5G 0 part

└─md2 9:2 0 10.5G 0 raid1

├─vg_root-lv_swap 252:1 0 1G 0 lvm

└─vg_root-lv_root 252:2 0 9.5G 0 lvm /mnt

sr0 11:0 1 1024M 1 rom

root@ccyy:/dev/disk/by-id# blkid

/dev/mapper/ubuntu--vg-ubuntu--lv: UUID="a850449f-e26e-481a-b22f-23c15e70ceb1" BLOCK_SIZE="4096" TYPE="ext4"

/dev/sda3: UUID="V7aH5h-tTCX-kxtX-F5xQ-0JC1-6Mt1-VsxZRG" TYPE="LVM2_member" PARTUUID="92dd6f87-a43e-454b-bad2-706b56ebb638"

/dev/sda2: UUID="952c333a-0317-46fd-9ac8-0bc650de8e94" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="8314b9b6-1f94-461c-9122-ac7490fd8caf"

/dev/sda1: UUID="9AE0-EC6F" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="442bf13f-3e13-4e98-9f47-6ef28ae0b3fc"

/dev/mapper/vg_root-lv_swap: UUID="4a2f4051-452d-48c7-8e09-273367a748ea" TYPE="swap"

/dev/sdb2: UUID="4ce4bdee-057d-520f-f0c1-a0bf86e3db49" UUID_SUB="37fac853-5568-5863-c308-88bfa53c89a1" LABEL="ccyy:boot" TYPE="linux_raid_member" PARTLABEL="Boot" PARTUUID="e05d341c-59d9-444c-abf0-ba7428a3da58"

/dev/sdb3: UUID="38978afa-82bb-de5e-ded1-ffe2768051c6" UUID_SUB="ad1f4819-5135-2d06-e7c5-4944f285c0a1" LABEL="ccyy:rootlvm" TYPE="linux_raid_member" PARTLABEL="RootLVM" PARTUUID="cda60d1b-f833-41f1-8275-5947cfc6c5ba"

/dev/sdb1: UUID="7C09-8F2D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI" PARTUUID="b7913e55-e3d8-4925-afc9-ef3d660c792e"

/dev/md2: UUID="OBOgHZ-2oD5-hzve-dJ3t-NzyS-M2h6-ABpkUK" TYPE="LVM2_member"

/dev/mapper/vg_root-lv_root: UUID="75d63fb5-45f1-4d46-8532-adfb7106ecb6" BLOCK_SIZE="4096" TYPE="ext4"

/dev/sdc2: UUID="4ce4bdee-057d-520f-f0c1-a0bf86e3db49" UUID_SUB="488e9cce-7bc9-f378-3345-def2b2c5c5b9" LABEL="ccyy:boot" TYPE="linux_raid_member" PARTLABEL="Boot" PARTUUID="fad80cf7-0f83-44fe-bdf2-630ea7fcb91a"

/dev/sdc3: UUID="38978afa-82bb-de5e-ded1-ffe2768051c6" UUID_SUB="cda0ccad-9f20-36d6-740b-aff962b4e505" LABEL="ccyy:rootlvm" TYPE="linux_raid_member" PARTLABEL="RootLVM" PARTUUID="9b648ad1-f58d-43d3-a510-5d770795a811"

/dev/md1: UUID="5fff8016-ed32-479d-b788-a9759d2aee76" BLOCK_SIZE="4096" TYPE="ext4"

/dev/sdc1: PARTLABEL="EFI" PARTUUID="df514116-60c9-4a8a-aa39-34777acd0e52"

ls /dev/disk/by-id

root@ccyy:/dev/disk/by-id# ls -al

total 0

drwxr-xr-x 2 root root 540 Aug 27 05:14 .

drwxr-xr-x 10 root root 200 Aug 27 05:14 ..

lrwxrwxrwx 1 root root 9 Aug 27 05:10 ata-VBOX_CD-ROM_VB0-01f003f6 -> ../../sr0

lrwxrwxrwx 1 root root 9 Aug 27 05:10 ata-VBOX_HARDDISK_VB25171e8a-798a13b2 -> ../../sdb

lrwxrwxrwx 1 root root 10 Aug 27 05:14 ata-VBOX_HARDDISK_VB25171e8a-798a13b2-part1 -> ../../sdb1

lrwxrwxrwx 1 root root 10 Aug 27 05:14 ata-VBOX_HARDDISK_VB25171e8a-798a13b2-part2 -> ../../sdb2

lrwxrwxrwx 1 root root 10 Aug 27 05:14 ata-VBOX_HARDDISK_VB25171e8a-798a13b2-part3 -> ../../sdb3

lrwxrwxrwx 1 root root 9 Aug 27 05:10 ata-VBOX_HARDDISK_VB46040f02-cb470435 -> ../../sdc

lrwxrwxrwx 1 root root 10 Aug 27 05:14 ata-VBOX_HARDDISK_VB46040f02-cb470435-part1 -> ../../sdc1

lrwxrwxrwx 1 root root 10 Aug 27 05:14 ata-VBOX_HARDDISK_VB46040f02-cb470435-part2 -> ../../sdc2

lrwxrwxrwx 1 root root 10 Aug 27 05:14 ata-VBOX_HARDDISK_VB46040f02-cb470435-part3 -> ../../sdc3

lrwxrwxrwx 1 root root 9 Aug 27 05:10 ata-VBOX_HARDDISK_VB95d3d5fb-46abb0a0 -> ../../sda

lrwxrwxrwx 1 root root 10 Aug 27 05:10 ata-VBOX_HARDDISK_VB95d3d5fb-46abb0a0-part1 -> ../../sda1

lrwxrwxrwx 1 root root 10 Aug 27 05:10 ata-VBOX_HARDDISK_VB95d3d5fb-46abb0a0-part2 -> ../../sda2

lrwxrwxrwx 1 root root 10 Aug 27 05:10 ata-VBOX_HARDDISK_VB95d3d5fb-46abb0a0-part3 -> ../../sda3

lrwxrwxrwx 1 root root 10 Aug 27 05:10 dm-name-ubuntu--vg-ubuntu--lv -> ../../dm-0

lrwxrwxrwx 1 root root 10 Aug 27 05:14 dm-name-vg_root-lv_root -> ../../dm-2

lrwxrwxrwx 1 root root 10 Aug 27 05:14 dm-name-vg_root-lv_swap -> ../../dm-1

lrwxrwxrwx 1 root root 10 Aug 27 05:10 dm-uuid-LVM-O6JdvmddaHg60i5jmujCxPKoRLjub23P0vrL6JFTR92ohvsMoPdMGAdW4il0htW8 -> ../../dm-0

lrwxrwxrwx 1 root root 10 Aug 27 05:14 dm-uuid-LVM-aXVkzDvtug0rNqOWufgFKcQ7aFCvW3TX6VBWFMJllNEn4vbEZj4nISm2KurftfQS -> ../../dm-2

lrwxrwxrwx 1 root root 10 Aug 27 05:14 dm-uuid-LVM-aXVkzDvtug0rNqOWufgFKcQ7aFCvW3TXGmUjuX1g0lYJDdetsGIAeVfiN07233DG -> ../../dm-1

lrwxrwxrwx 1 root root 9 Aug 27 05:14 lvm-pv-uuid-OBOgHZ-2oD5-hzve-dJ3t-NzyS-M2h6-ABpkUK -> ../../md2

lrwxrwxrwx 1 root root 10 Aug 27 05:10 lvm-pv-uuid-V7aH5h-tTCX-kxtX-F5xQ-0JC1-6Mt1-VsxZRG -> ../../sda3

lrwxrwxrwx 1 root root 9 Aug 27 05:14 md-name-ccyy:boot -> ../../md1

lrwxrwxrwx 1 root root 9 Aug 27 05:14 md-name-ccyy:rootlvm -> ../../md2

lrwxrwxrwx 1 root root 9 Aug 27 05:14 md-uuid-38978afa:82bbde5e:ded1ffe2:768051c6 -> ../../md2

lrwxrwxrwx 1 root root 9 Aug 27 05:14 md-uuid-4ce4bdee:057d520f:f0c1a0bf:86e3db49 -> ../../md1

root@ccyy:/dev/disk/by-id# df -h

Filesystem Size Used Avail Use% Mounted on

tmpfs 188M 1.2M 186M 1% /run

/dev/mapper/ubuntu--vg-ubuntu--lv 11G 5.1G 5.1G 51% /

tmpfs 468M 0 468M 0% /dev/shm

efivarfs 256K 12K 239K 5% /sys/firmware/efi/efivars

none 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service

tmpfs 468M 0 468M 0% /tmp

none 1.0M 0 1.0M 0% /run/credentials/systemd-resolved.service

/dev/sda2 2.0G 184M 1.7G 11% /boot

/dev/sda1 1.1G 6.4M 1.1G 1% /boot/efi

none 1.0M 0 1.0M 0% /run/credentials/systemd-networkd.service

none 1.0M 0 1.0M 0% /run/credentials/getty@tty1.service

tmpfs 94M 8.0K 94M 1% /run/user/0

/dev/mapper/vg_root-lv_root 9.3G 5.2G 3.7G 59% /mnt

/dev/md1 988M 229M 693M 25% /mnt/boot

/dev/sdb1 511M 6.4M 505M 2% /mnt/boot/efi

root=UUID=75d63fb5-45f1-4d46-8532-adfb7106ecb6

fstab

/dev/disk/by-id/dm-uuid-LVM-O6JdvmddaHg60i5jmujCxPKoRLjub23P0vrL6JFTR92ohvsMoPdMGAdW4il0htW8 / ext4 defaults 0 1

/boot was on /dev/sda2 during curtin installation

/dev/disk/by-uuid/952c333a-0317-46fd-9ac8-0bc650de8e94 /boot ext4 defaults 0 1

/boot/efi was on /dev/sda1 during curtin installation

/dev/disk/by-uuid/9AE0-EC6F /boot/efi vfat defaults 0 1

/swap.img none swap sw 0 0

UUID=75d63fb5-45f1-4d46-8532-adfb7106ecb6 / ext4 defaults 0 1

UUID=5fff8016-ed32-479d-b788-a9759d2aee76 /boot ext4 defaults 0 1

UUID=7C09-8F2D /boot/efi vfat defaults 0 1

UUID=4a2f4051-452d-48c7-8e09-273367a748ea none swap sw 0 0

忘记保存raid配置文件

停止lvm,用于处理底层raid

vgchange -an

mdadm --stop /dev/md126

mdadm --stop /dev/md127

重新装机raid1

DISK1="/dev/sdb" # 第一块物理硬盘

DISK2="/dev/sdc" # 第二块物理硬盘

创建 /boot 的 RAID1 (md1)

mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=1.2 \

{DISK1}2 {DISK2}2

创建 LVM 物理卷基础的 RAID1 (md2)

mdadm --create /dev/md2 --level=1 --raid-devices=2 --metadata=1.2 \

{DISK1}3 {DISK2}3

echo ""> /etc/mdadm/mdadm.conf

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

‌再次更新 initramfs‌

!!!!okok

执行mdadm --assemble --scan使新配置生效,无需重启

停用vg

vgchange -an vg_name

激活

vgchange -ay vg_name

vgchange -ay 激活全部

写到本地目录

okok use!!

--- 2. 用户配置区域 (请根据实际情况修改) ---

readonly DISK1="/dev/sdb" # 第一块物理硬盘

readonly DISK2="/dev/sdc" # 第二块物理硬盘

readonly HOSTNAME="ubuntu-raid"

readonly USERNAME="ubuntu"

readonly PASSWORD="ubuntu" # 安装后请立即修改

readonly TIMEZONE="Asia/Shanghai"

分区大小 (MiB)

readonly EFI_SIZE=512

readonly BOOT_SIZE=1024

readonly SWAP_SIZE=1024 # 8GB Swap

RAID 设备名称

readonly MD_BOOT="/dev/md1"

readonly MD_ROOT="/dev/md2"

readonly VG_NAME="vg_root"

readonly LV_ROOT="lv_root"

readonly LV_SWAP="lv_swap"

uuid_boot=(blkid -s UUID -o value "MD_BOOT")

uuid_root=(blkid -s UUID -o value "/dev/{VG_NAME}/${LV_ROOT}")

uuid_efi=(blkid -s UUID -o value "{DISK1}1")

uuid_swap=(blkid -s UUID -o value "/dev/{VG_NAME}/${LV_SWAP}")

if \[ -z "$uuid_boot" \|\| -z "$uuid_root" \|\| -z "$uuid_efi" ]; then

log_error "无法获取 UUID,请检查文件系统是否已格式化。"

exit 1

fi

写入 fstab

cat > ./fstab <<EOF

<file system> <mount point> <type> <options> <dump> <pass>

UUID=${uuid_root} / ext4 errors=remount-ro 0 1

UUID=${uuid_boot} /boot ext4 defaults 0 2

UUID=${uuid_efi} /boot/efi vfat umask=0077 0 1

UUID=${uuid_swap} none swap sw 0 0

EOF

UUID=75d63fb5-45f1-4d46-8532-adfb7106ecb6 / ext4 defaults 0 1

UUID=5fff8016-ed32-479d-b788-a9759d2aee76 /boot ext4 defaults 0 1

UUID=7C09-8F2D /boot/efi vfat defaults 0 1

UUID=4a2f4051-452d-48c7-8e09-273367a748ea none swap sw 0 0

???

update-grub,生成配置文件错误的问题

!!!

???

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck

问题就出在这里!

root@ccyy:~# cp /boot/in* /mnt/boot/

root@ccyy:~# cp /boot/vm* /mnt/boot/

root@ccyy:~# cp /boot/config-7.0.0-30-generic* /mnt/boot/

如果不行就重新安装内核文件

--bootloader-id=ubuntu

sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck

update-initramfs -u -k all

grub-install /dev/sdb

update-grub

进入系统后update-grub为何还会识别错误

在进入新安装的 Ubuntu 26.04 系统后,update-grub 仍然识别错误(例如指向错误的 UUID、遗漏其他系统或生成无效条目),通常由以下几个核心原因导致。结合你之前的 LVM 和 RAID 环境,以下是详细分析及解决方案:

  1. os-prober 探测逻辑混乱

update-grub 依赖 os-prober 工具来扫描磁盘上的其他操作系统。在复杂分区结构(如 LVM + RAID + EFI)中,os-prober 容易混淆"当前运行系统的根分区"和"被探测到的其他分区"。

‌现象‌:生成的 grub.cfg 中,Linux 启动项的 root=UUID=... 指向了 Live USB、旧系统或错误的 LVM 卷。

‌原因‌:os-prober 通过挂载分区并读取 /etc/fstab 或 /boot/grub/grub.cfg 来判断身份。如果新系统的 /etc/fstab 尚未正确更新,或者 LVM 卷名在不同环境下不一致,它就会抓取错误信息。

‌解决‌:

确保新系统的 /etc/fstab 已正确写入所有分区的 UUID。

手动编辑 /etc/default/grub,添加或修改以下行以禁用 os-prober 的自动探测(如果不需要双系统引导):

bash

GRUB_DISABLE_OS_PROBER=true

如果必须保留双系统,请手动修正 /boot/grub/grub.cfg 中的 UUID,然后运行 sudo update-grub 再次验证。

  1. LVM 与 RAID 元数据未同步

你使用了 LVM (vg_root-lv_root) 和软 RAID (/dev/md1 for /boot)。GRUB 需要特定的模块才能识别这些结构。

‌现象‌:启动时提示 unknown filesystem 或 no such device。

‌原因‌:update-grub 生成的配置中可能缺少 insmod lvm 或 insmod raid 指令,或者 search --fs-uuid 命令未能正确锁定包含 /boot 的 RAID 阵列。

‌解决‌:

检查 /etc/default/grub 确保启用了必要模块:

bash

GRUB_PRELOAD_MODULES="lvm raid mdraid"

重新生成配置:

bash

sudo update-grub

sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck

  1. EFI 引导项注册冲突

虽然 grub-install 成功,但主板的 NVRAM 中可能存在多个名为 "ubuntu" 的引导项,指向不同的 EFI 文件路径。

‌现象‌:BIOS 启动菜单中有多个 Ubuntu 选项,部分无法启动。

‌原因‌:每次安装或修复 GRUB 时,如果没有清理旧的 EFI 变量,新的引导项可能与旧的共存,导致 BIOS 随机选择一个无效的入口。

‌解决‌:

查看当前所有 EFI 引导项:

bash

sudo efibootmgr -v

删除无效或重复的引导项(假设 Boot0001 是无效的):

bash

sudo efibootmgr -b 0001 -B

确保当前的 "ubuntu" 引导项指向正确的 \EFI\ubuntu\shimx64.efi 或 grubx64.efi。

  1. /boot 独立分区的挂载问题

你的 /boot 是独立的 RAID1 分区 (/dev/md1)。如果 update-grub 运行时 /boot 未正确挂载,它将把内核镜像写入根分区的 /boot 目录,而不是实际的 /dev/md1。

‌现象‌:重启后找不到内核文件,因为 GRUB 从 /dev/md1 读取,但文件实际在 /dev/mapper/vg_root-lv_root 上。

‌检查‌:

bash

mount | grep /boot

如果未显示 /dev/md1 on /boot,说明挂载失败。

‌解决‌:

手动挂载:

bash

sudo mount /dev/md1 /boot

检查 /etc/fstab 中 /boot 的 UUID 是否与 blkid /dev/md1 一致。

重新运行 sudo update-grub。

  1. 快速修复步骤总结

如果在进入系统后 update-grub 依然生成错误配置,请按以下步骤手动修正:

‌获取正确 UUID‌:

bash

sudo blkid /dev/mapper/vg_root-lv_root # 记录 ROOT_UUID

sudo blkid /dev/md1 # 记录 BOOT_UUID (如果需要)

‌手动编辑 /boot/grub/grub.cfg‌(临时生效):

找到 menuentry 'Ubuntu' 部分,确保:

search --fs-uuid --set=root <ROOT_UUID>

linux /vmlinuz-... root=UUID=<ROOT_UUID> ro quiet splash

initrd /initrd.img-...

注意:由于 /boot 是独立分区,GRUB 中的路径应为 /vmlinuz-... 而非 /boot/vmlinuz-...

‌永久修复‌:

确保 /etc/fstab 正确。

确保 /etc/default/grub 中 GRUB_DISABLE_OS_PROBER=false(如果需要探测其他系统)或 true(如果仅单系统)。

执行:

bash

sudo update-grub

sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck

通过以上步骤,可以解决因 LVM/RAID 复杂性导致的 update-grub 识别错误问题。

System.map-7.0.0-30-generic

1. 删除旧的 device.map

rm /boot/grub/device.map

2. 重新运行 grub-install,让它自动重新探测设备

grub-install --target=x86_64-efi --efi-directory=/boot/efi --recheck

3. 更新 GRUB 配置文件

update-grub

相关推荐
今天AI了吗12 分钟前
AI工作流的自动化趋势:从手动实验到自主Agent的研究范式转变
运维·数据库·人工智能·sql·机器学习·自动化·github
Wang's Blog26 分钟前
Vibe Coding一人即团队系列28: 前端、后端与数据库的概念解析
前端·数据库
安全指北针27 分钟前
IDC《中国数据安全技术发展路线图,2025》:数据安全管理平台推荐厂商
大数据·数据库·人工智能
瀚高PG实验室29 分钟前
PostgreSQL CREATE TYPE 未检查 multirange schema 的 CREATE 权限HGVE-2026-E007
数据库·postgresql·瀚高数据库
xfan_me33 分钟前
手机在网状态接口-空号查询-空号过滤API
数据库·人工智能·python·智能手机
会博通·代码搬运工1 小时前
双层PDF技术实现与档案数字化系统的API集成实践
数据库·人工智能·分布式·python·计算机视觉·api集成
Sagittarius_A*1 小时前
【好靶场】报错注入-sql注入-字符型
数据库·sql·web安全·网络安全·sql注入
HwJack201 小时前
鸿蒙ArkData键值型数据库实战:Schema 定义与商品库存同步案例
数据库·华为·harmonyos
oradh1 小时前
Oracle表在线重定义操作总结
数据库·oracle·oracle表在线重定义