标签: storage

27
推荐指数
1
解决办法
1万
查看次数

在 Linux 上存储和备份 1000 万个文件

我运行一个网站,其中大约 1000 万个文件(书籍封面)存储在 3 个级别的子目录中,范围为 [0-f]:

0/0/0/
0/0/1/
...
f/f/f/
Run Code Online (Sandbox Code Playgroud)

这导致每个目录大约有 2400 个文件,这在我们需要检索一个文件时非常快。这也是许多问题建议的做法。

但是,当我需要备份这些文件时,仅浏览包含 10m 文件的 4k 目录就需要很多天。

所以我想知道我是否可以将这些文件存储在一个容器(或 4k 容器)中,每个文件系统都完全像一个文件系统(某种安装的 ext3/4 容器?)。我想这几乎与直接访问文件系统中的文件一样有效,并且这将具有非常有效地复制到另一台服务器的巨大优势。

关于如何做到最好的任何建议?或者任何可行的替代方案(noSQL,...)?

linux storage filesystems ext4 ext3

26
推荐指数
4
解决办法
7230
查看次数

BBWC:理论上是个好主意,但有人保存过你的数据吗?

我熟悉 BBWC(电池支持的写入缓存)的用途 - 并且以前在我的服务器中使用过它们,即使 UPS 良好。显然存在它不提供保护的故障。我很想知道它在实践中是否真的提供了任何真正的好处。

(注意,我特别在寻找有 BBWC 和崩溃/失败的人的回应,以及 BBWC 是否有助于恢复)

更新

在收到这里的反馈后,我越来越怀疑 BBWC 是否会增加任何价值。

为了对数据完整性有任何信心,文件系统必须知道数据何时被提交到非易失性存储(不一定是磁盘 - 我会回到这一点)。值得注意的是,很多磁盘都在数据何时提交到磁盘上撒谎 ( http://brad.livejournal.com/2116715.html )。虽然假设禁用磁盘缓存可能会使磁盘更诚实似乎是合理的,但仍然不能保证情况确实如此。

由于 BBWC 中的缓冲区通常很大,屏障可能需要将更多数据提交到磁盘,因此会导致写入延迟:一般建议是在使用非易失性回写缓存时禁用屏障(并禁用 on-磁盘缓存)。然而,这似乎会破坏写操作的完整性——仅仅因为在非易失性存储中维护更多数据并不意味着它会更加一致。事实上,如果逻辑事务之间没有划分,那么确保一致性的机会似乎比其他方式少。

如果 BBWC 在数据进入它的非易失性存储(而不是提交到磁盘)时确认障碍,那么它似乎满足了数据完整性要求而不会造成性能损失 - 这意味着仍应启用障碍。然而,由于这些设备通常表现出与将数据刷新到物理设备(使用屏障显着慢)以及禁用屏障的广泛建议一致的行为,因此它们不能以这种方式运行。为什么不?

如果操作系统中的 I/O 被建模为一系列流,那么当写缓存由操作系统管理时,有一些范围可以最小化写屏障的阻塞效应 - 因为在这个级别只有逻辑事务(单个流) 需要提交。另一方面,不知道哪些数据位构成事务的 BBWC 必须将其整个缓存提交到磁盘。内核/文件系统是否在实践中真正实现了这一点,需要付出比我目前愿意投入的更多的努力。

磁盘组合告诉 fibs 已提交的内容和突然断电无疑会导致损坏 - 并且日志或日志结构的文件系统在中断后不会执行完整的 fsck 不太可能检测到损坏,更不用说试图修复它。

就故障模式而言,根据我的经验,大多数突然停电是由于市电断电(使用 UPS 和管理关机可轻松缓解)。人们从机架中拉出错误的电缆意味着数据中心卫生(标签和电缆管理)不佳。UPS 无法防止某些类型的突然断电事件 - PSU 或 VRM 中的故障 带有屏障的 BBWC 可以在发生故障时提供数据完整性,但此类事件有多常见?从这里缺乏回应来看,这是非常罕见的。

当然,在堆栈中提高容错能力比 BBWC 的成本要高得多——但是,将服务器实现为集群还有许多其他性能和可用性方面的好处。

减轻突然断电影响的另一种方法是实施 SAN - AoE 使这成为一个实用的提议(我在 iSCSI 中并没有真正看到这一点),但同样存在更高的成本。

disaster-recovery storage hardware-raid bbwc

26
推荐指数
2
解决办法
8225
查看次数

ZFS 数据丢失情况

我正在考虑构建一个更大的 ZFS 池(150TB+),我想听听人们关于由于硬件故障导致数据丢失情况的经验,特别是区分仅丢失一些数据的实例与整个文件系统(如果在 ZFS 中甚至有这样的区别)。

例如:假设 vdev 由于外部驱动器机箱断电或控制器卡故障等故障而丢失。从我读到的池应该进入故障模式,但如果返回 vdev 池应该恢复?或不?或者如果 vdev 部分损坏,是否会丢失整个池、某些文件等?

如果 ZIL 设备出现故障会怎样?或者只是几个 ZIL 之一?

真正感谢以深厚的技术知识为后盾的所有轶事或假设场景!

谢谢!

更新:

由于我们是一家小型企业(大约 9 人),因此我们以低廉的价格执行此操作,但我们生成了大量成像数据。

数据主要是小文件,据我统计,每 TB 大约有 50 万个文件。

数据很重要,但不是超级关键。我们计划使用 ZFS 池来镜像 48TB 的“实时”数据阵列(使用了 3 年左右),并将其余存储用于“归档”数据。

该池将使用 NFS 共享。

机架应该在建筑物备用发电机线上,我们有两个 APC UPS,能够在满载时为机架供电 5 分钟左右。

backup zfs storage filesystems

25
推荐指数
2
解决办法
7134
查看次数

KVM 和 Libvirt - 如何热插拔新的 virtio 磁盘?

我正在尝试将基于文件的磁盘热添加到正在运行的 KVM 虚拟服务器。我使用命令从头开始创建了一个新磁盘

dd of=/home/cloud/vps_59/test.img bs=1 seek=5G count=0
Run Code Online (Sandbox Code Playgroud)

我希望通过在 virsh shell 中执行此操作来将其热添加到来宾中:

virsh # attach-disk vps_59 /home/cloud/vps_59/test.img \
        vdd --driver=file --subdriver=raw
Run Code Online (Sandbox Code Playgroud)

然后域的 XML 定义变为:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw'/>
  <source file='/home/cloud/vps_59/root.img'/>
  <target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='disk'>
  <driver name='file' type='raw'/>
  <source file='/home/cloud/vps_59/test.img'/>
  <target dev='vdd' bus='virtio'/>
</disk>
Run Code Online (Sandbox Code Playgroud)

如您所见,驱动程序名称错误,应该是driver name='qemu'现有vda磁盘。我已经尝试过,--drive=qemu但它表示它不受支持。

其次,一旦我重新启动运行 Ubuntu 10.04.4 LTS 的虚拟机,我只会“看到”新添加的驱动器。如何使驱动器“热插拔”?我希望虚拟机无需重新启动即可立即“看到”新驱动器。

virtualization storage virtual-machines libvirt kvm-virtualization

25
推荐指数
1
解决办法
4万
查看次数

在生产 Web 服务器上使用 NFS 是否合理?

假设连接是通过 LAN 1Gbe 或 10Gbe 连接,可以在生产服务器上合理地使用 NFS 作为将计算服务器连接到存储服务器的方法吗?

显然有一些网络开销,如果启用了同步模式,NFS 在写入时似乎特别慢。否则它看起来相当轻巧,并且能够根据我的说法进行扩展,但我个人对此几乎没有经验。我错了吗?

问题是我现在有一个服务器既充当存储服务器又充当 Web 服务器,但我最终可能在将来需要将两者分开,并考虑到某些请求需要通过 Web 应用程序层进行身份验证在初始化文件传输之前,这个软件有点棘手。网络 fs 挂载是我最简单的选择……不知道这是否合适。

我还计划尝试使用 NFS 的本地缓存,这应该可以大大提高性能,但我不确定这是否足够。

至于替代方案,我知道只有 iSCSI 是真正的竞争对手,而且大多数人似乎都推荐 NFS,而不是其他任何鲜为人知的产品。

performance storage nginx nfs web-server

25
推荐指数
4
解决办法
5033
查看次数

如何从 Windows 7/Vista 格式化为 FAT32

在 Windows 7/Vista 中使用 FAT32(兼容 Mac)格式化 USB 驱动器的最佳方法是什么?

我问是因为磁盘管理只允许您选择 exFAT(因为我相信磁盘超过 32 GB)。

使用diskpart从命令行执行此操作似乎也不起作用。

storage windows-7 hard-drive windows-vista fat32

24
推荐指数
2
解决办法
63万
查看次数

HBA卡和RAID卡有什么区别?

我以为我知道 HBA 和 RAID 之间的区别。

在我看来,HBA 从主主板/CPU 卸载,只是 JBOD……通常有一个外部 SAS 端口,而 RAID 卡与 HBA 做同样的工作,但增加了所有不错的 RAID 级别,可能还有电池备份+其他好处。

在查看产品的 LSI 网站后,我看到他们有内置 RAID 的 HBA 卡,例如LSI SAS 9211-8i 主机总线适配器

所以......显然我错了!

HBA卡和RAID卡有什么区别?

hardware raid storage hba hardware-raid

24
推荐指数
4
解决办法
14万
查看次数

如何在 docker 卷容器和 docker 卷之间做出决定?

阅读文档后,我发现自己对如何最好地管理生产应用程序/服务数据有些困惑。

似乎有3种选择:

  1. 只需将卷映射到主机目录(即 的-v参数docker run
  2. 为数据创建一个 docker 容器镜像(即单独的容器和--volumes-from
  3. 创建一个 docker 卷(即docker volume create

现在,似乎公认的做法是选项 #2,但我想知道 #3 的目的是什么。

特别是您如何正确处理这些场景,docker volume对于每种情况,最好使用数据卷容器还是这个?

  • 您需要服务器中单独卷和/或存储层中的应用程序数据
  • 备份
  • 恢复数据

storage docker

24
推荐指数
2
解决办法
1万
查看次数

将 ZFS 服务器作为虚拟来宾托管

我还是 ZFS 的新手。我一直在使用 Nexenta,但我正在考虑切换到 OpenIndiana 或 Solaris 11 Express。现在,我正在考虑将 ZFS 服务器虚拟化为 ESXi、Hyper-V 或 XenServer 中的客户机(我还没有决定哪一个 - 我倾向于使用 ESXi 来支持 VMDirectPath 和 FreeBSD)。

主要原因是我似乎有足够的资源可以轻松地同时运行 1-3 个其他 VM。主要是 Windows 服务器。也可能是 Linux/BSD VM。我希望虚拟化 ZFS 服务器托管其他 VM 的所有数据,以便它们的数据可以保存在与 ZFS 磁盘分离的物理磁盘上(以 iscsi 或 nfs 安装)。

该服务器目前有一个 AMD Phenom II,总共有 6 个内核(2 个未锁定)、16GB RAM(最大)和一个 LSI SAS 1068E HBA,连接了 (7) 个 1TB SATA II 磁盘(计划在带热备件的 RAIDZ2 上)。我还有 (4) 个 32GB SATA II SSD 连接到主板。我希望将两个 SSD 镜像到引导镜像(用于虚拟主机),并将另外两个 SSD 留给 ZIL 和 L2ARC(用于 ZFS VM 来宾)。我愿意再添加两个磁盘来存储 VM 来宾并将所有七个当前磁盘分配为 ZFS …

hardware virtualization zfs storage nexenta

23
推荐指数
1
解决办法
2万
查看次数