我最近开始在某些服务器上对大于 1 TB 的硬盘驱动器使用 LVM。它们很有用、可扩展且非常易于安装。但是,我找不到任何关于 LVM 的危险和警告的数据。
使用 LVM 的缺点是什么?
我有一个企业级工作站,里面有一个Adaptec 6405E RAID 控制器。据 Adaptec 称,该 RAID 控制器不会,也永远无法原生支持 4K 磁盘扇区。如果你在里面插一个 4K 磁盘,那么如果它有 512 字节的扇区模拟模式(512e),它将使用 512e。如果它没有 512e,则磁盘根本无法工作。
连接到我的 6405E 的是四个 HGST SATA 磁盘,它们都具有 4K 本机扇区,但它们确实支持 512e。磁盘在 RAID10 中,阵列运行“相当好”(性能从好到好,但并不惊人)。
如果没有擦上的磁盘,并重新初始化数组中的数据,假设我在插上的Adaptec 71605E,这不支持原生4K扇区,将控制器使用我的磁盘接口时4K扇区?或者,是否将使用 512e 或 4Kn 的决定融入到磁盘格式的结构中,以至于我必须擦除磁盘才能做到这一点?
这个问题只是关于我是否必须备份我的数据并重新初始化阵列,或者是否可以要求控制器(自动或手动干预)“切换”到高级格式 4Kn 寻址。我已经确定如果我确实擦除并重新初始化阵列,我绝对可以使用这个新的 RAID 控制器从头开始设置它以在所有驱动器上使用 4Kn。
请注意,我已经非常熟悉arcconf
命令行实用程序,并且之前曾使用它将此阵列从 RAID0 升级到 RAID10(是的,我知道,我不应该一开始就使用 RAID0,但我很幸运,好吧?)。如果arcconf
实用程序的某些功能可以在 Adaptec 7 系列控制器上从 512e“切换”到 4Kn,我很想知道它,这样我就可以使用它来避免重新格式化和暂时将数据卸载到一个备份位置。
在最坏的情况下,我已经对关键数据进行了异地备份,但是系统上加载了太多软件,因此我对整个数据进行块层复制会更便宜(就花费的时间而言)阵列到另一个磁盘——可能是一个通过 AHCI 连接到主板的便宜的 4TB 磁盘——然后在逻辑阵列重新初始化后将其复制回来。与重新安装所有内容(大量带有激活功能的专有 Windows 程序等)的前景相比,这实际上更便宜、更快捷。
关于对齐 4k 扇区磁盘的 Serverfault 有很多问题,但有一件事对我来说还不是很清楚。
我成功地对齐了我的 RAID1+LVM。我所做的其中一件事是使用 mdadm superblock 1.0 版(将超级块存储在磁盘的末尾)。
手册页是这样说的:
不同的子版本将超级块存储在设备的不同位置,要么在末尾(对于 1.0),要么在开头(对于 1.1),要么从开头开始 4K(对于 1.2)。“1”相当于“1.0”。“默认”相当于“1.2”。
默认的 1.2 版本是为 4k 扇区驱动器制作的吗?在我看来,事实并非如此,因为从一开始的 4k + 超级块的长度并不是 4k 的众多(如果我没记错的话,超级块大约有 200 字节长)。
欢迎对此有任何见解。
编辑:
下面的回答是 mdadm superblock 1.1 和 1.2 用于 4k 对齐。我刚刚创建了一个全设备突袭:
mdadm --create /dev/md4 -l 1 -n 2 /dev/sdb /dev/sdd
Run Code Online (Sandbox Code Playgroud)
然后我给它添加了一个逻辑卷:
vgcreate universe2 /dev/md4
Run Code Online (Sandbox Code Playgroud)
阵列以 16 MB/s 的速度同步:
md4 : active raid1 sdd[1] sdb[0]
1465137424 blocks super 1.2 [2/2] [UU]
[>....................] resync = 0.8% (13100352/1465137424) finish=1471.6min speed=16443K/sec
Run Code Online (Sandbox Code Playgroud)
所以我怀疑它是否正确对齐。
(磁盘为 1.5 TB …
我知道我必须将 4k 驱动器对齐 8 个扇区的倍数,但是 md-RAID/LVM/dm-crypt 呢?我如何告诉这些层我的驱动器是 4k?如果他们不遵守 4k 扇区大小,分区对齐是没有用的。如何对齐 LVM/md/加密层?谢谢。
我首先创建了 16 个正好 10 亿字节的空文件:
for i in {1..16}; do dd if=/dev/zero of=/mnt/temp/block$i bs=1000000 count=1000 &> /dev/null; done
Run Code Online (Sandbox Code Playgroud)
然后我在文件上创建越来越大的 RAIDZ2 卷,强制 ashift=12 来模拟 4K 扇区驱动器,例如
zpool create tank raidz2 -o ashift=12 /mnt/temp/block1 /mnt/temp/block2...
Run Code Online (Sandbox Code Playgroud)
然后比较使用df -B1
看实际尺寸。
Filesystem 1B-blocks
tank 12787777536
Run Code Online (Sandbox Code Playgroud)
我的结果:
+-------+-------------+-------------+------------+------------+
| disks | expected | actual | overhead | efficiency |
+-------+-------------+-------------+------------+------------+
| 3 | 1000000000 | 951975936 | 48024064 | 95.2 |
| 4 | 2000000000 | 1883766784 | 116233216 | 94.2 |
| 5 | …
Run Code Online (Sandbox Code Playgroud) 我在运行 Debian wheezy 和 GRUB 1.99-27+deb7u3 的 4 x 1 TB 驱动器的服务器上遇到问题。
sda 和 sdb 具有使用(Linux 软件)RAID1 镜像的分区,包括/boot
. sdc 和 sdd 各有一个分区,为数据镜像一个 LVM 物理卷。GRUB 安装到 sda 和 sdb。我用mdadm
于--fail
和--remove
1个TB SDC,并取代了旧的驱动器(一个ST91000640NS)用新的2 TB ST2000NX0243。
安装新驱动器后,GRUB 可以达到
GRUB loading.
Welcome to GRUB!
Run Code Online (Sandbox Code Playgroud)
但无法显示菜单。sdc 上的驱动器指示灯持续亮起,因此推测 GRUB 核心正在尝试读取该驱动器,即使它不需要访问 /boot/grub。我试过两个相同型号的驱动器,都用 测试得很好smartctl
,结果相同。在 sdc 驱动器托架为空的情况下,一切正常启动。系统从实时 USB 启动并且可以访问新驱动器,因此这不是硬件不兼容 (*)。我确定是 sdc 被删除了,并且没有迹象表明 BIOS 对驱动器进行了重新排序。
(*)这可能不是一个安全的假设。见答案。
所以我有以下相关问题:
grub rescue>
提示?4K 问题是否也会阻止将驱动器用于 Linux RAID? …在阅读了 SQL Server 的磁盘分区对齐最佳实践之后,我只想尝试一下这些建议,但是在我的 linux 测试服务器上。设置分区偏移所需的参数是什么(如果可能的话,对于fdisk,或者 linux live cd 上可用的任何其他分区工具)?
我有一个包含 8 个 1TB 驱动器的存储系统,这些驱动器使用 4k 扇区大小的“高级格式”。我计划在此硬件上运行 NexentaStor,并希望确保将 4k 扇区大小考虑在内。在使用 ZFS 创建根池和后续数据池时,有什么特别需要我记住的吗?