blockdev [选项] [命令] [命令参数] 设备文件
| 命令/选项 | 参数 | 说明 |
|---|---|---|
--report |
设备文件 | 报告指定设备的信息 |
--getsz |
设备文件 | 获取设备的大小(512字节扇区数) |
--getss |
设备文件 | 获取逻辑扇区大小 |
--getpbsz |
设备文件 | 获取物理扇区大小 |
--getra |
设备文件 | 获取预读扇区数 |
--setra N |
N(扇区数) | 设置预读扇区数 |
--getro |
设备文件 | 检查设备是否为只读(1=只读,0=读写) |
--setro |
设备文件 | 将设备设置为只读 |
--setrw |
设备文件 | 将设备设置为读写 |
--flushbufs |
设备文件 | 刷新缓冲区 |
--getdiscardzeroes |
设备文件 | 检查丢弃操作是否返回零 |
--getioopt |
设备文件 | 获取最优I/O大小 |
--getalignoff |
设备文件 | 获取对齐偏移 |
--getmaxsect |
设备文件 | 获取最大扇区数 |
-q |
- | 安静模式,只输出错误信息 |
-v |
- | 详细模式 |
-V |
- | 显示版本信息 |
# 显示设备的详细报告
sudo blockdev --report /dev/sda
# 输出示例:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 500107862016 /dev/sda
# 获取设备大小(512字节扇区数)
sudo blockdev --getsz /dev/sda
# 获取逻辑扇区大小
sudo blockdev --getss /dev/sda
# 获取物理扇区大小
sudo blockdev --getpbsz /dev/sda
# 获取预读扇区数
sudo blockdev --getra /dev/sda
# 检查是否为只读设备
sudo blockdev --getro /dev/sda
# 设置预读扇区数为1024(512KB)
sudo blockdev --setra 1024 /dev/sda
# 将设备设置为只读
sudo blockdev --setro /dev/sda
# 将设备设置为读写
sudo blockdev --setrw /dev/sda
# 刷新缓冲区
sudo blockdev --flushbufs /dev/sda
#!/bin/bash
# 设备信息收集脚本
DEVICE="/dev/sda"
echo "=== 设备信息报告 ==="
echo "设备: $DEVICE"
# 获取设备大小(扇区数)
SECTORS=$(sudo blockdev --getsz "$DEVICE")
echo "扇区数: $SECTORS"
# 获取扇区大小
SECTOR_SIZE=$(sudo blockdev --getss "$DEVICE")
echo "扇区大小: $SECTOR_SIZE 字节"
# 计算设备总大小(GB)
TOTAL_SIZE=$((SECTORS * SECTOR_SIZE / 1024 / 1024 / 1024))
echo "设备总大小: $TOTAL_SIZE GB"
# 检查设备状态
READ_ONLY=$(sudo blockdev --getro "$DEVICE")
if [ "$READ_ONLY" -eq 1 ]; then
echo "设备状态: 只读"
else
echo "设备状态: 读写"
fi
# 获取预读设置
READAHEAD=$(sudo blockdev --getra "$DEVICE")
echo "预读扇区数: $READAHEAD"
echo "=== 报告结束 ==="
# 根据不同设备类型设置合适的预读值
# SSD通常需要较小的预读值,HDD需要较大的预读值
# 对于SSD设备
sudo blockdev --setra 256 /dev/nvme0n1
# 对于传统机械硬盘
sudo blockdev --setra 1024 /dev/sda
# 查看当前预读设置
sudo blockdev --getra /dev/sda
# 在备份期间将设备设置为只读
sudo blockdev --setro /dev/sdb1
# 执行备份操作(此时设备不可写)
# rsync -av /source/ /mnt/backup/
# 备份完成后恢复读写状态
sudo blockdev --setrw /dev/sdb1
#!/bin/bash
# 监控设备是否被意外设置为只读
DEVICES=("/dev/sda" "/dev/sdb" "/dev/sdc")
for DEV in "${DEVICES[@]}"; do
STATUS=$(sudo blockdev --getro "$DEV")
if [ "$STATUS" -eq 1 ]; then
echo "警告: $DEV 被设置为只读模式!" | mail -s "设备只读警告" admin@example.com
fi
done
# 诊断工具:收集所有块设备信息
for DEV in /dev/sd[a-z] /dev/nvme*; do
if [ -b "$DEV" ]; then
echo "=== $DEV 信息 ==="
sudo blockdev --report "$DEV"
echo ""
fi
done
# 检查设备物理属性
sudo blockdev --getpbsz /dev/sda # 物理扇区大小
sudo blockdev --getalignoff /dev/sda # 对齐偏移
sudo blockdev --getmaxsect /dev/sda # 最大扇区数
A: 主要区别:
A: 是的,通过blockdev设置的预读值是临时的,重启后会恢复默认值。要永久设置,需要在系统启动脚本中添加相应命令。
# 在/etc/rc.local中添加
blockdev --setra 1024 /dev/sda
# 使用lsblk查看所有块设备
lsblk
# 或使用fdisk
sudo fdisk -l
# 查看块设备主号码
ls -l /dev/sda
A: 可以,blockdev支持所有块设备,包括USB存储设备、SD卡等。
sudo blockdev --report /dev/sdb # USB设备通常为sdb
| 命令 | 主要用途 | 适用设备 | 特点 |
|---|---|---|---|
blockdev |
通用块设备控制 | 所有块设备 | 接口统一,脚本友好 |
hdparm |
ATA/IDE硬盘管理 | ATA/IDE硬盘 | 功能专一,性能调整 |
sdparm |
SCSI设备管理 | SCSI/SAS设备 | SCSI特定功能 |
smartctl |
SMART信息监控 | 支持SMART的设备 | 健康状态监控 |