随着sfdisk -s我可以看到磁盘容量如下:
$ sfdisk -s
/dev/cciss/c0d0: 143338560
total: 143338560 blocks
Run Code Online (Sandbox Code Playgroud)
如何查看磁盘制造商等磁盘详细信息?我试过了hdparm,但出现错误:
$ hdparm -i /dev/cciss/c0d0
/dev/cciss/c0d0:
HDIO_GET_IDENTITY failed: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud) 当我希望 Linux 在不重启的情况下考虑新创建的分区时,我有几个工具可用于强制刷新内核“分区缓存”:
partx -va /dev/sdXkpartx -va /dev/sdXhdparm -z /dev/sdXsfdisk -R /dev/sdXpartprobe /dev/sdX我不确定这些技术之间的区别,但我认为它们不使用相同的ioctl,例如BLKRRPART或BLKPG。那么,它们之间有ioctl什么区别呢?
我可以在不重新启动的情况下扩大根 ( /) 分区fdisk(删除使用相同的第一个扇区重新创建它,但最后一个扇区更大)。
但是,我无法让内核重新读取分区表:
# partx -va /dev/vda
partx: /dev/vda: adding partition #5 failed: Device or resource busy
partx: /dev/vda: error adding partition 5
# kpartx -va /dev/vda
device-mapper: reload ioctl on vda5 failed: Invalid argument
add map vda5 : 0 41492480 linear 0:0 2048
# hdparm -z /dev/vda
/dev/vda:
re-reading partition table
BLKRRPART failed: Device or resource busy
# sfdisk -R /dev/vda
BLKRRPART: Device or resource busy
This disk is currently in use. …Run Code Online (Sandbox Code Playgroud) 我想将一些逻辑分区转换为扩展分区,所以我正在关注这个已接受的答案。但是,在备份当前分区表的步骤中,我搞砸了并输入了以下内容而不是所写的内容。
sfdisk -f /dev/sda > /mnt/parts.txt
Run Code Online (Sandbox Code Playgroud)
这导致了这个:
Disk /dev/sda: 30401 cylinders, 255 heads, 63 sectors/track
Old situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/sda1 0+ 304- 304- 2441214+ 82 Linux swap / Solaris
/dev/sda2 * 304+ 565- 262- 2097152 83 Linux
/dev/sda3 565+ 4486- 3921- 31495168 83 Linux
/dev/sda4 4486+ 30401- 25916- 208163840 5 Extended
/dev/sda5 4486+ 24026- 19540- 156954624 83 Linux
Run Code Online (Sandbox Code Playgroud)
如您所见,单位是柱面和块,与正确的扇区导出相比,这可能会导致精度损失。 …
我认为对我的 RAID 设置做的明智之举是在驱动器开始出现故障和它们开始变旧之前更换驱动器......我真的买不起很多云备份空间,我想由于磨损,我的驱动器有保证的最终故障。
我有 3 个 2TB 驱动器,带有 GPT、grub、一个小型系统 raid1 分区和一个大型 raid5 主分区。我正在使用 Arch Linux。
我打算一次更换一个驱动器。我想发布我的行动计划,看看是否有人能想到它行不通的原因,或者是否有更好的方法来做到这一点。
步骤1:
找出/dev/sda我要更换的设备(即),通过物理拔掉它并检查/proc/mdstat以找出/dev/sdx失败的设备。
第二步:
重新插入并使用sfdisk复制分区表
sfdisk -d /dev/sdx > partition.layout
Run Code Online (Sandbox Code Playgroud)
第三步:
放入相同大小的新物理驱动器
第四步:
sfdisk /dev/sdx < partition.layout
Run Code Online (Sandbox Code Playgroud)
第五步:
用于mdadm根据 arch wiki 上的说明将新驱动器添加到阵列。
mdadm --add /dev/md0 /dev/sdx1
mdadm --add /dev/md1 /dev/sdx2
Run Code Online (Sandbox Code Playgroud)
第六步:
重装grub?等待重新同步完成,然后用其他 2 个驱动器重复整个过程?
我想我的问题主要是,这会成功吗?有什么我想念的吗?我不想错过一些明显的东西并丢失我的所有数据。
非常感谢您的任何帮助/见解。
编辑:
只是为了将讨论的结果放在同一个地方,我想说我想出了如何让 mdadm 和 smartmontools (smartd) 监控,并在我的硬盘驱动器出现问题时通过电子邮件通知我。我使用已同步到手机的 gmail 帐户设置了 ssmtp。
由于我已经购买了新驱动器,我将保留它们,并在出现问题时更换它们。我的理解是,最终所有硬盘驱动器都会出现故障。感谢您提供有关如何执行此操作的建议和提示(不降低阵列质量)。一旦我负担得起升级,我将使用带有 ECC 主板/内存/等的 ZFS。并感谢您在该方向上的提示。非常感谢你们真的帮助了:D
我正在尝试在 debian 8 上使用 sfdisk 扩展分区。我正在运行以下命令:
sfdisk -H 255 -S 63 --quiet --Linux --leave-last -uM --force --no-reread /dev/md1 -N4 < /tmp/abc
Run Code Online (Sandbox Code Playgroud)
运行命令时出现以下错误:
Successfully wrote the new partition table
Re-reading the partition table ...
sfdisk: BLKRRPART: Device or resource busy
sfdisk: The command to re-read the partition table failed.
Run partprobe(8), kpartx(8) or reboot your system now,before using mkfs
sfdisk: If you created or changed a DOS partition, /dev/foo7, say, then use dd(1) to zero the first 512 bytes: dd if=/dev/zero …Run Code Online (Sandbox Code Playgroud) 告诉一般信息(容量、扇区大小等)后fdisk显示 8 列:sdXY、Boot、begin、end、扇区数、大小、标志、类型。
分区按其sdXY名称中的 Y 排序。有时(即当这是真的时)它会在其下方添加注释,表明它们未按存储顺序列出。
如何让fdisk(或任何其他适当的工具)列出按起始扇区(即第三列)排序的面向块的设备上的分区?
我只想从lsblk捕获磁盘
如图所示,fd0 也出现了,尽管它不是真正可供使用的磁盘
在这种情况下,我们可以只做lsblk | grep磁盘| grep -v fd0
但也许我们错过了一些其他需要通过grep -v过滤它们的设备
lsblk中可能出现的其他磁盘设备 grep 磁盘而不是真正的磁盘?
lsblk | grep disk
fd0 2:0 1 4K 0 disk
sda 8:0 0 100G 0 disk
sdb 8:16 0 2G 0 disk /Kol
sdc 8:32 0 2G 0 disk
sdd 8:48 0 2G 0 disk
sde 8:64 0 2G 0 disk
sdf 8:80 0 2G 0 disk
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K …Run Code Online (Sandbox Code Playgroud)