当我想创建一个新的分区表时,我有以下选项:
aix
amiga
bsd
dvh
gpt
mac
msdos
pc98
sun
loop
gparted 中的默认值似乎是msdos
我猜是“MBR”分区表。但是gpt
是更新的,但对 Windows 的支持较少。我已经使用 Linux 很长时间了,但我从来没有真正研究过分区。
有哪些不同的选项及其区别?是否有推荐用于仅用于 Linux 的磁盘?
我正在创建我的第一个 Arch Linux 安装脚本,我想像在archwiki 中一样自动进行基本安装,或者您可以在此处找到相同的说明但更容易阅读:https : //www.gloriouseggroll.tv/arch-linux-efi -安装指南/
我想擦除分区表,我必须手动输入:
gdisk /dev/sda
x
z
y
y
Run Code Online (Sandbox Code Playgroud)
我希望 bash 脚本自动执行此操作。
我看过一些磁盘格式化/分区讨论,提到第一步要破坏现有的 GPT/MBR 数据结构:
sgdisk --zap-all /dev/nvme0n1
Run Code Online (Sandbox Code Playgroud)
我以前没有意识到这一点,当我设置磁盘时,我通常使用:
parted --script --align optimal \
/dev/nvme0n1 -- \
mklabel gpt \
mkpart ESP fat32 1MiB 512MiB \
set 1 boot on \
name 1 boot \
mkpart primary 512MiB 100% \
set 2 lvm on \
name 2 primary
Run Code Online (Sandbox Code Playgroud)
我应该先把事情清理干净(例如sgdisk --zap-all
)吗?不这样做有什么缺点?
我刚刚为硬盘 ( /dev/sda
)上的整个空间创建了一个 GPT 磁盘标签,如下所示:
# parted
(parted) select /dev/sda
(parted) mklabel gpt
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 0% 100%
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) quit
Run Code Online (Sandbox Code Playgroud)
现在进一步阅读后,我意识到“忽略”可能是一个坏主意。
但...
# parted
(parted) print
Model: ATA ST33000650NS (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: …
Run Code Online (Sandbox Code Playgroud) 我想以相同的方式自动对我的所有工作站进行分区:
我认为将此添加到我的 preseed.cfg 将完成我想要的:
d-i partman-auto/workstation_recipe string \
root :: \
1024 1023 1024 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ /boot } \
. \
2048 2047 2048 linux-swap \
$primary{ } \
method{ swap } format{ } \
. \
17408 100000000000 -1 ext4 \
$primary{ } \
method{ format } format{ …
Run Code Online (Sandbox Code Playgroud) partition system-installation preseed debian-installer partition-table
我已经(有)以下设置:使用 LUKS 和单独加密的 /home 分区的全盘加密。错误地删除了我的 /root 但发现得足够早,所以只更改了分区表。现在我只剩下以下内容:
sudo hexdump -C /dev/nvme0n1 |grep LUKS
3e900000 4c 55 4b 53 ba be 00 01 61 65 73 00 00 00 00 00 |LUKS....aes.....|
Run Code Online (Sandbox Code Playgroud)
这意味着 LUKS 标头仍然完整(呼)
然后我在该偏移量上创建一个循环设备
sudo losetup -o 0x3e900000 -r -f /dev/nvme0n1
Run Code Online (Sandbox Code Playgroud)
并安装它
sudo cryptsetup luksOpen /dev/loop1 luksrecover
Run Code Online (Sandbox Code Playgroud)
到目前为止,它运行良好,安装正确,我可以看到我的文件,并且通过更多的命令,我可以恢复我单独的 /home 。
但是,由于我确实拥有完整的操作系统,因此我希望将其退回。似乎唯一的问题是,没有 grub 可以调用初始的 Xubuntu LUKS 解密器。
现在,因为我看到我的分区有很大的偏移,我想那是 grub 曾经居住的地方
那么,我该怎么做才能恢复我的操作系统?据我所知,我必须以某种方式将字节 0 - $offset 标记为 grub 并将 grub 安装在那里,其余的作为其他东西。所以我尝试了 grub-install /dev/nvme0n1 并且它抱怨 aufs
grub-install: error: failed to get canonical path …
Run Code Online (Sandbox Code Playgroud) 我想要双启动,问题是如果我在 Ubuntu 之后安装 Arch Linux,我不知道如何让 Arch Linux 检测到 Ubuntu。
我是这样分区Ubuntu的
在Arch中我只创建根分区,所以结果是这样的
然后我这样做了:
mkfs.ext4 /dev/sda4
mount /dev/sda4 /mnt
mkdir /mnt/boot
mkdir /mnt/boot/EFI
mount /dev/sda1 /mnt/boot/EFI
Run Code Online (Sandbox Code Playgroud)
结果是
即将完成我所做的安装
pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot/EFI --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)
但没有找到 Ubuntu
Obs:我尝试为 Ubuntu 制作一个 EFI 分区,为 Arch 制作另一个 EFI 分区,我执行了相同的过程,但什么也没做。
那么我需要做什么才能将 Ubuntu 添加到 Arch Linux grub 中。谢谢
我正在尝试使用文件从头开始制作硬盘映像。这包括 MBR、分区表、分区数量等。但我一生都无法让 Linux 挂载我创建的分区。
\n\n编辑:请参阅问题末尾的更新 - 似乎与 vboxsf 有关
\n\n到目前为止,我已经尝试了许多不同的方法,但那些最有效的方法最终都到达了同一个地方。我在下面制作了一个简化版本,应该足以解释我的问题
\n\n使用 dd 生成空文件(或截断速度)
\n\ndd if=/dev/zero of=test.img bs=1M count=150\n
Run Code Online (Sandbox Code Playgroud)\n\n制作分区表
\n\nparted -s test.img mklabel gpt\nWarning: The resulting partition is not properly aligned for best performance.\n
Run Code Online (Sandbox Code Playgroud)\n\n制作分区
\n\nparted -s test.img -- mkpart logical 0 5M\nparted -s test.img set 1 bios_grub on\nparted -s test.img -- mkpart logical 5M 50M\netc.\n
Run Code Online (Sandbox Code Playgroud)\n\n安装为循环设备(加载 max_part=31 的循环模块)
\n\nlosetup /dev/loop0 test.img\n
Run Code Online (Sandbox Code Playgroud)\n\nlsblk 来检查
\n\n …filesystems partition loop-device disk-image partition-table
我可以
但是当我尝试“解锁”它时,事情变得非常奇怪:我没有办法
fsck
它,也不我需要格式化它,我该怎么办?
这是我的gparted
输出:
$ sudo gparted
Created symlink /run/systemd/system/-.mount ? /dev/null.
Created symlink /run/systemd/system/boot-efi.mount ? /dev/null.
Created symlink /run/systemd/system/home-iago\x2dlito-.docker-devicemapper.mount ? /dev/null.
Created symlink /run/systemd/system/home.mount ? /dev/null.
Created symlink /run/systemd/system/run-user-1000.mount ? /dev/null.
Created symlink /run/systemd/system/run-user-117.mount ? /dev/null.
Created symlink /run/systemd/system/tmp.mount ? /dev/null.
Created symlink /run/systemd/system/var.mount ? /dev/null.
======================
libparted : 3.2 # see screenshots
====================== #
Input/output error during write on /dev/mmcblk0 # first error …
Run Code Online (Sandbox Code Playgroud) 在 Linux 上,该命令lsblk -o partlabel
将显示partlabel
块设备。
我曾经gdisk
改变过一个partlabel
.
更改后,lsblk
仍报告 的旧值partlabel
。
(旁白:路径/dev/disk/by-partlabel/*
也仍在使用旧partlabel
值。)
有没有办法刷新缓存以便lsblk
报告 的新值partlabel
?
我不确定缓存到底在哪里。它可能是 udev、sysfs 或其他地方。
相比之下,blkid
正确报告新的partlabel
. 但是,我希望我可以避免切换到blkid
(出于各种原因)。
(旁白:重新启动可能会更新这些partlabel
值。但如果可能的话,我宁愿避免重新启动。)
partition-table ×10
partition ×4
disk ×2
gpt ×2
arch-linux ×1
debian ×1
disk-image ×1
filesystems ×1
gdisk ×1
grub ×1
grub2 ×1
input ×1
linux ×1
loop-device ×1
lsblk ×1
luks ×1
mbr ×1
parted ×1
performance ×1
preseed ×1
sd-card ×1
sgdisk ×1
sysfs ×1
udev ×1
uefi ×1