我有一个通过 USB 连接的 1 TB 驱动器。它包含一个填充整个设备的 LVM物理卷(没有任何分区表)。当我尝试使用整个 PV扩展逻辑卷时,设备映射器开始抱怨 LVM 在 PV 上分配的部分大于设备。来自设备映射器的错误消息(如 所示dmesg)报告大小为1953320367 [dm] 扇区:
device-mapper: table: 254:0: sdf too small for target: start=1821353984, len=132169728, dev_size=1953320367
Run Code Online (Sandbox Code Playgroud)
但是 LVM 创建了一个具有 238467 个物理范围的 PV ,即1953521664 [lvm] 个扇区(大约多 100 MB):
$ pvdisplay /dev/sdf
--- Physical volume ---
PV Name /dev/sdf
VG Name apu-vg1
PV Size 931.51 GiB / not usable 1.71 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 238467 …Run Code Online (Sandbox Code Playgroud) 设置
我的 USB 机箱(Buffalo DriveStation Quad)包含四个连接到我的 nas 服务器(ubuntu 服务器 14.04)的驱动器。机箱配置为 JBOD 模式,因此我将在 Linux 中看到所有磁盘。
其中两个磁盘(sdb 和 sdc)使用软件 raid 配置为/dev/md0(raid1)。并且/dev/md0作为单个分区 ( /mnt/part1)挂载为ext4 文件系统,没有日志记录。
另外两个磁盘(sdd 和 sde)使用 LVM 设置为一个卷组,我从中安装了两个逻辑分区。其中一个是整个卷组容量的 90% ( /mnt/part2),另一个是 10% ( /mnt/part3)。两者都是没有日志记录的 ext4。
APM 问题
我的问题始于默认的 APM 模式,因为我注意到硬盘驱动器磁头每隔几分钟就会非常积极地停放。在对该主题进行了一番研究后,我最终使用了hdparm -B198 /dev/sd[bcde]. 这似乎可以实现一定程度的节能,但实际上并没有进行任何头部停车。
有睡吗?
我对目前的情况感到满意,但如果没有活动,我仍然希望驱动器进入睡眠状态。尤其是 sdb 和 sdc ( /mnt/part1),它们在 95% 的时间内没有真正获得任何活动。无论我尝试过什么,问题似乎都在于驱动器的睡眠时间不会超过一两分钟。
卸载所有分区并发出命令hdparm -y /dev/sd[bcde]将使驱动器进入睡眠模式,但只会持续几分钟。之后,他们都会一一醒来。我尝试通过启用 block_dump ( echo 1 > /proc/sys/vm/block_dump)来调试问题,但没有看到对磁盘的任何访问。
我还尝试使用 禁用 APM hdparm -B255 /dev/sd[bcde],然后命令它们进入睡眠状态,但同样的事情。几分钟后驱动器仍然会醒来。 …
当我希望 Linux 在不重启的情况下考虑新创建的分区时,我有几个工具可用于强制刷新内核“分区缓存”:
partx -va /dev/sdXkpartx -va /dev/sdXhdparm -z /dev/sdXsfdisk -R /dev/sdXpartprobe /dev/sdX我不确定这些技术之间的区别,但我认为它们不使用相同的ioctl,例如BLKRRPART或BLKPG。那么,它们之间有ioctl什么区别呢?
并非所有SATA 驱动器都支持热插拔。尤其是较旧的型号似乎无法正常工作,并且需要重新启动系统,尽管控制器与较新的驱动器配合良好。
问题:如何在不拔插的情况下检查驱动器是否支持热插拔?
我想可以使用它来实现,hdparm但我找不到它。也许还有其他可用的方法?有人可以建议吗?
使用非 NVMe 驱动器,我可以运行:
# hdparm -I /dev/whatever | grep TRIM
Data Set Management TRIM supported (limit 8 block)
Deterministic read data after TRIM
Run Code Online (Sandbox Code Playgroud)
使用三星 960 EVO 1TB NVMe 驱动器 (PCI Express),我得到:
# hdparm -I /dev/nvme0n1
/dev/nvme0n1:
HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)
我可以跑
# smartctl --all /dev/nvme0n1
Run Code Online (Sandbox Code Playgroud)
并获取有关驱动器的一些信息,但没有关于 TRIM 类型的信息。
我装了nvme-cli,跑nvme get-feature -f 0到-f 0xe并从驱动器得到了一些功能,但没有对TRIM类型。
Linux 中有没有办法查询 NVME 设备,列出它支持的 TRIM 类型?
在 Linux 中是否有一种方法可以查询 NVMe 设备,以获取hdparm -I如果它不是 NVMe 时会显示的其他任何内容的列表,smartctl并且nvme …
我正在尝试解释 hdparm 的这个结果:
janus@behemoth ~ $ sudo hdparm -Tt --direct /dev/nvme0n1
/dev/nvme0n1:
Timing O_DIRECT cached reads: 2548 MB in 2.00 seconds = 1273.69 MB/sec
Timing O_DIRECT disk reads: 4188 MB in 3.00 seconds = 1395.36 MB/sec
Run Code Online (Sandbox Code Playgroud)
我不明白缓存读取如何比直接磁盘读取慢。如果我删除 --direct,我会得到我所期望的:磁盘读取比缓存的慢:
janus@behemoth ~ $ sudo hdparm -Tt /dev/nvme0n1
/dev/nvme0n1:
Timing cached reads: 22064 MB in 2.00 seconds = 11042.86 MB/sec
Timing buffered disk reads: 2330 MB in 3.00 seconds = 776.06 MB/sec
Run Code Online (Sandbox Code Playgroud)
(虽然它现在说“缓冲磁盘读取”)。
有人可以向我解释发生了什么吗?
hdparm -t [device]
Run Code Online (Sandbox Code Playgroud)
告诉我阅读速度。有没有办法显示写入速度?当我man hdarm | grep write得到 flag -F、-n和-r时-W,所有这些都没有提供我正在寻找的所需结果。
那么有没有一种方法可以通过一个命令来显示读写速度呢?
我已经使用命令行设置了旋转时间hdparm -S 100 /dev/sda1,但在重新启动后(在此期间我分离了磁盘,但随后使用相同的电缆/端口再次连接它),它似乎没有进入睡眠状态。于是,我再次应用了该命令。
我认为睡眠设置存储在磁盘的固件中并由磁盘本身处理,因此它独立于计算机(新操作系统、操作系统重新启动等)。这是错误的吗?并且该设置存在于操作系统中,因此我必须hdparm -S在每次操作系统启动时再次运行该命令?
[gala@arch ~]$ sudo !!
sudo hdparm -i /dev/sda
/dev/sda:
Model=KINGSTON SHFS37A120G, FwRev=603ABBF0, SerialNo=50026B725B0A1515
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=unknown, MaxMultSect=1, MultSect=1
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=234441648
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: unknown setting WriteCache=enabled
Drive conforms to: unknown: ATA/ATAPI-2,3,4,5,6,7
* signifies the current active mode
Run Code Online (Sandbox Code Playgroud)
hdparmModel从哪里读取字段?从哪里来sysfs?从哪里来?
看了这个问题:
我能够检测到 HDD 和 SSD。现在的问题是我不知道如何检测SSHD,因为该hdparm工具显示我的磁盘(ST1000DX001)是经典HDD。
我是否能够根据通过发出 IDENTIFY Ata 命令收集的任何信息来检测它?
我想安全地擦除我的 SSD(在 Ubuntu 18.04 上)
\n\n我愿意
\n\nsudo time hdparm --user-master u --security-erase mypassword /dev/sda\nRun Code Online (Sandbox Code Playgroud)\n\n我收到此错误消息
\n\n/dev/sda:\n Issuing SECURITY_ERASE command, password="mypassword", user=user\nSG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 04 51 40 00 21 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nSG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 04 51 40 01 21 04 00 …Run Code Online (Sandbox Code Playgroud) 我在笔记本电脑中使用带有两个硬盘驱动器的 Ubuntu 14.04。第一个包含我的根分区和我的主分区。第二个仅用于备份。
我知道硬盘驱动器会在几年后坏掉。由于第二个仅用于备份,我想确保在我不进行备份时没有读取/写入数据。/etc/fstab此硬盘驱动器的条目如下所示:
UUID=1ab2c3d4-1234-1234-1234-a1b2c3d4 /mnt/Backup btrfs defaults,comment=x-gvfs-show 0 2
Run Code Online (Sandbox Code Playgroud)
目前,我使用
hdparm -Y /dev/disk/by-uuid/1ab2c3d4-1234-1234-1234-a1b2c3d4
Run Code Online (Sandbox Code Playgroud)
让我的硬盘进入睡眠状态。这够了吗?