1
This commit is contained in:
26
backend.py
26
backend.py
@@ -2022,13 +2022,18 @@ def chroot_and_repair_grub(mount_point: str, target_disk: str,
|
|||||||
log_warning(f"创建目录失败: {e}")
|
log_warning(f"创建目录失败: {e}")
|
||||||
|
|
||||||
# 4. 创建 grubenv 文件(普通文件,不是符号链接)
|
# 4. 创建 grubenv 文件(普通文件,不是符号链接)
|
||||||
|
# GRUB2 要求环境块精确为 4096 字节(一个扇区)
|
||||||
grubenv_path = os.path.join(mount_point, "boot", grub_dir_name, "grubenv")
|
grubenv_path = os.path.join(mount_point, "boot", grub_dir_name, "grubenv")
|
||||||
try:
|
try:
|
||||||
|
# 构建 4096 字节的 grubenv 内容
|
||||||
|
header = "# GRUB Environment Block\n"
|
||||||
|
saved_entry = "saved_entry=\n"
|
||||||
|
# 计算需要填充的字节数(4096 - header - saved_entry - 结尾的 #)
|
||||||
|
padding_size = 4096 - len(header) - len(saved_entry) - 1
|
||||||
|
content = header + saved_entry + "#" * padding_size
|
||||||
with open(grubenv_path, 'w') as f:
|
with open(grubenv_path, 'w') as f:
|
||||||
f.write("# GRUB Environment Block\n")
|
f.write(content)
|
||||||
f.write("saved_entry=\n")
|
log_success(f"✓ 创建 grubenv ({os.path.getsize(grubenv_path)} 字节): {grubenv_path}")
|
||||||
f.write("#" * 4096 + "\n")
|
|
||||||
log_success(f"✓ 创建 grubenv: {grubenv_path}")
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log_warning(f"创建 grubenv 失败: {e}")
|
log_warning(f"创建 grubenv 失败: {e}")
|
||||||
|
|
||||||
@@ -2379,8 +2384,11 @@ def chroot_and_repair_grub(mount_point: str, target_disk: str,
|
|||||||
os.makedirs(target_dir, exist_ok=True)
|
os.makedirs(target_dir, exist_ok=True)
|
||||||
log_info(f"✓ 创建目录: {target_dir}")
|
log_info(f"✓ 创建目录: {target_dir}")
|
||||||
|
|
||||||
# 创建目标文件(1024 字节的 GRUB 环境块)
|
# 创建目标文件(精确 4096 字节的 GRUB 环境块)
|
||||||
grubenv_content = "# GRUB Environment Block\nsaved_entry=\n" + "#" * 4096 + "\n"
|
header = "# GRUB Environment Block\n"
|
||||||
|
saved_entry = "saved_entry=\n"
|
||||||
|
padding_size = 4096 - len(header) - len(saved_entry) - 1
|
||||||
|
grubenv_content = header + saved_entry + "#" * padding_size
|
||||||
with open(target_path, 'w') as f:
|
with open(target_path, 'w') as f:
|
||||||
f.write(grubenv_content)
|
f.write(grubenv_content)
|
||||||
log_success(f"✓ 创建符号链接目标文件: {target_path}")
|
log_success(f"✓ 创建符号链接目标文件: {target_path}")
|
||||||
@@ -2400,7 +2408,11 @@ def chroot_and_repair_grub(mount_point: str, target_disk: str,
|
|||||||
|
|
||||||
# 方法: 使用 echo 和 tee 在 chroot 内创建文件
|
# 方法: 使用 echo 和 tee 在 chroot 内创建文件
|
||||||
grubenv_chroot_path = grubenv_dir_in_chroot + "/grubenv"
|
grubenv_chroot_path = grubenv_dir_in_chroot + "/grubenv"
|
||||||
grubenv_content = "# GRUB Environment Block\nsaved_entry=\n" + "#" * 4096 + "\n"
|
# 精确 4096 字节的 grubenv
|
||||||
|
header = "# GRUB Environment Block\n"
|
||||||
|
saved_entry = "saved_entry=\n"
|
||||||
|
padding_size = 4096 - len(header) - len(saved_entry) - 1
|
||||||
|
grubenv_content = header + saved_entry + "#" * padding_size
|
||||||
|
|
||||||
# 使用 printf 创建文件(更可靠)
|
# 使用 printf 创建文件(更可靠)
|
||||||
success, _, stderr = run_command(
|
success, _, stderr = run_command(
|
||||||
|
|||||||
Reference in New Issue
Block a user