有时,在调整磁盘分区大小或以其他方式处理磁盘分区时,cfdisk 会说:
Wrote partition table, but re-read table failed. Reboot to update table.
(其他分区工具也会发生这种情况,所以我认为这是 Linux 问题而不是 cfdisk 问题。)为什么会这样,为什么它只偶尔发生,我该怎么做才能避免它?
注意:请假设我实际编辑的分区都没有打开、安装或以其他方式使用。
更新:
cfdisk 用于ioctl(fd, BLKRRPART, NULL)告诉 Linux 重新读取分区表。目前推荐的其他两个工具 ( hdparm -z DEVICE, sfdisk -R DEVICE) 的作用完全相同。partprobe DEVICE另一方面,该命令似乎使用了一个名为 BLKPG 的新 ioctl,这可能会更好;我不知道。(如果 BLKPG 失败,它也会回退到 BLKRRPART。)
BLKPG 似乎是一个“这个分区已经改变;这是新的大小”操作,它看起来像是partprobe在通过的设备上的所有分区上单独调用它,所以如果单个分区未使用,它应该可以工作。但是,我还没有机会尝试。
如何从 Linux(特别是 Ubuntu)的命令行删除设备上的所有分区?我尝试查看 fdisk,但它显示了一个交互式提示。我正在寻找一个命令,我可以提供一个设备路径(例如 /dev/sda),它会删除 ext4、linux-swap 以及它找到的任何其他分区。本质上,这与我打开 GParted 并手动选择和删除所有分区是一样的。这看起来相当简单,但不幸的是,我无法通过谷歌找到任何东西。
要从干净状态开始,我需要从命令行将硬盘重置为空状态。
这与运行擦除实用程序无关,不必覆盖数据。
这个问题与Deleting All Partitions From the Command Line非常相似
那里的解决方案效果很好,
dd if=/dev/zero of=/dev/sda bs=512 count=1 conv=notrunc
Run Code Online (Sandbox Code Playgroud)
但是如果我想使用这样一个被覆盖的磁盘,我会收到设备仍在使用中的错误。
root@grml ~ # blockdev --rereadpt /dev/sda
BLKRRPART: Device or resource busy
Run Code Online (Sandbox Code Playgroud)
或者
root@grml ~ # partprobe
Error: Partition(s) 2, 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes. …Run Code Online (Sandbox Code Playgroud) 这对我来说很恶心,但它有效:
echo -e "n\np\n1\n\n\nt\nc\na\n1\nw" | fdisk /dev/sdb
Run Code Online (Sandbox Code Playgroud)
我想知道一种更谨慎或更优雅的方式来实现这一点。在执行此任务之前,整个引导记录和分区表都已清零,因此我们可以相信分区 1 可用。
Fdisk 显示多种分区类型。选择 83) Linux 和 8e) Linux LVM 有什么区别?
选择 83) Linux 也适用于使用 LVM,即使在 /dev/sdb 上创建物理卷而没有分区表也能正常工作。
在 fdisk 中选择分区类型真的很重要吗?选择 Linux 或 Linux LVM 作为分区类型有什么区别?
[root@tst-01 ~]# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec …Run Code Online (Sandbox Code Playgroud) I recently resized a VPS from a 50GB SSD to a 300GB SSD through my hoster's control panel. I now am trying to resize my main partition with fdisk to be able to use all the new space. However, fdisk gives me a warning upon starting:
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
Run Code Online (Sandbox Code Playgroud)
It seems obvious that it's a sixfold of the previous …
我们在 Dell R720xd 上有一个约 18TB 的大型硬件 raid 阵列。目前 RAID5 阵列由 6x4TB 组成,我需要扩展它。
步骤1 扩展硬件raid 阵列。
如果您安装了戴尔管理工具,那就足够简单了。
omconfig storage vdisk action=reconfigure controller=0 vdisk=1 raid=r5 pdisk=0:1:0,0:1:1,0:1:3,0:1:3,0:1:4,0:1:5,0:1:8,0:1:9
Run Code Online (Sandbox Code Playgroud)
(新磁盘是最后两个,可以使用omreport工具确认)一切都很好,虽然需要一段时间,我能够确认阵列已经扩展..
% omreport storage vdisk controller=0 vdisk=1
Virtual Disk 1 on Controller PERC H710P Mini (Embedded)
Controller PERC H710P Mini (Embedded)
ID : 1
Status : Ok
Name : bak
State : Ready
Hot Spare Policy violated : Not Assigned
Encrypted : No
Layout : RAID-5
Size : 26,078.50 GB (28001576157184 bytes)
...
Device …Run Code Online (Sandbox Code Playgroud) 您可以在一行中使用 fdisk 命令在 USB 磁盘中创建一个分区吗?
fdisk 命令本质上是交互式的,但我想使用 fdisk 命令在一行中自动创建分区。
这是 fdisk 的输出:
[root@ns1 ~]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 268 2048287+ 82 Linux swap / Solaris
/dev/sda3 269 2611 18818810 83 Linux
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 e2label 时,我收到以下结果:
[root@ns1 ~]# e2label /dev/sda
e2label: Bad magic number in super-block while trying to open /dev/sda
Couldn't find valid filesystem …Run Code Online (Sandbox Code Playgroud) 做 afdisk -l
是一个很方便的命令,但是如何让 fidsk 以 MB 或 GB 等单位打印分区大小?