SnapRAID手册

SnapRAID手册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
snapraid [-c, --conf CONFIG]
[-f, --filter PATTERN] [-d, --filter-disk NAME]
[-m, --filter-missing] [-e, --filter-error]
[-a, --audit-only] [-h, --pre-hash] [-i, --import DIR]
[-p, --plan PERC|bad|new|full]
[-o, --older-than DAYS] [-l, --log FILE]
[-Z, --force-zero] [-E, --force-empty]
[-U, --force-uuid] [-D, --force-device]
[-N, --force-nocopy] [-F, --force-full]
[-R, --force-realloc]
[-S, --start BLKSTART] [-B, --count BLKCOUNT]
[-L, --error-limit NUMBER]
[-v, --verbose] [-q, --quiet]
status|smart|up|down|diff|sync|scrub|fix|check|list|dup
|pool|devices|touch|rehash

snapraid [-V, --version] [-H, --help] [-C, --gen-conf CONTENT]

SnapRAID是一个磁盘阵列的备份程序。它能存储您的数据的奇偶校验信息,并从多达六个磁盘故障中恢复。

SnapRAID主要针对存有大量大文件并很少改动的家庭媒体中心。

除了能够从磁盘故障中恢复,SnapRAID的其他功能还有:

  • 所有的数据都被哈希,以确保数据的完整性,并避免静默损坏(silent corruption)。
  • 如果发生故障的磁盘太多而无法进行恢复,则只会丢失发生故障的磁盘数据。其他磁盘中的所有数据都是安全的。
  • 如果您不小心删除了磁盘中的某些文件,可以将其恢复。
  • 您可以直接添加已有数据的磁盘,而不会丢失已有数据。
  • 磁盘可以不同大小。
  • 您可以随时添加磁盘。
  • 它不锁定你的数据。您可以随时停止使用SnapRAID,无需重新格式化或移动数据。
  • 支持部分休眠。访问文件时,只需要唤醒文件所在的磁盘,节省电力并产生较少的噪音。

SnapRAID官方网站

SnapRAID定位于RAID和备份程序之间,试图取得最佳折中点。当然它也有一些限制,你应该在使用前注意。

主要的一点是,如果一个磁盘发生故障,并且您最近没有"sync"(更新冗余),则可能无法完全恢复。更具体地说,您可能无法恢复上次更新冗余操作后更改或删除的文件。即使更改或删除的文件不在故障磁盘中,也会发生这种情况。所以SnapRAID更适合于很少改变的数据。

相反,新添加的文件不会阻止恢复已经存在的文件。只有在发生故障的磁盘上,您才有可能丢失刚添加的文件。

和传统RAID比较,SnapRAID还有一些其他限制:

  • 每个磁盘都是单独的文件系统。而使用传统RAID的话,你只有一个大的文件系统。
  • 它不分条数据。而使用传统RAID,您可以通过分条来提高速度。
  • 它不支持实时恢复。而使用传统RAID,当磁盘发生故障时,您不必停止工作。
  • 它只能从有限数量的磁盘中恢复损坏。而使用传统备份的话,您可以从整个磁盘阵列的完全故障中恢复。
  • 只保存文件,时间戳,符号链接和硬链接。权限,所有权和扩展属性不会保存。

开始使用

要使用SnapRAID,您需要首先选择您的磁盘阵列中的一个磁盘用来专门存储"parity"信息。使用一个磁盘进行奇偶校验,您将能够从单个磁盘故障(同RAID5)中恢复。

如果您希望能够从更多磁盘故障(如RAID6)中恢复,则必须预留额外的磁盘以实现奇偶校验。额外增加一个奇偶校验磁盘都可以恢复一个额外的磁盘故障。

您必须选择阵列中最大的磁盘作为奇偶校验盘,因为奇偶校验信息可能会随着阵列中最大的数据磁盘而变大。这些磁盘应该专用于存储"parity"文件。您不应该将数据存储其中。

然后,您必须定义要用SnapRAID保护的"data"磁盘。若这些磁盘包含很少更改的数据,则保护更有效。所以最好不要包含Windows 的C盘,或者Unix的home,var和tmp目录。

另外,还需要保存受保护的文件列表,文件列表保存在"content"文件中,通常存储在数据盘,奇偶盘或启动盘中。这些文件包含了验证您的备份数据完整性所需的所有校验信息。"content"文件存储在多个副本中,并且每个副本必须位于不同的磁盘上,以确保即使在多个磁盘发生故障的情况下,也至少有一个副本可用。

例如,假设您只对一个奇偶级别的保护(同RAID5)感兴趣,并且您的磁盘如下:

1
2
3
4
/mnt/diskp <- 奇偶校验信息磁盘(奇偶校验盘)
/mnt/disk1 <- 要保护的第一个磁盘(数据盘)
/mnt/disk2 <- 要保护的第二个磁盘(数据盘)
/mnt/disk3 <- 要保护的第三个磁盘(数据盘)

您可以使用以下选项创建配置文件"/etc/snapraid.conf"

1
2
3
4
5
6
7
parity /mnt/diskp/snapraid.parity
content /var/snapraid/snapraid.content
content /mnt/disk1/snapraid.content
content /mnt/disk2/snapraid.content
data d1 /mnt/disk1/
data d2 /mnt/disk2/
data d3 /mnt/disk3/

如果您使用Windows,则应使用Windows路径格式,使用驱动器号和反斜杠代替斜线:

1
2
3
4
5
6
7
parity E:\snapraid.parity
content C:\snapraid\snapraid.content
content F:\array\snapraid.content
content G:\array\snapraid.content
data d1 F:\array\
data d2 G:\array\
data d3 H:\array\

如果您有许多磁盘,并且用完了驱动器号,则可以将磁盘直接挂载到文件夹中。请参照: https://www.google.com/search?q=Windows+mount+point

此时您已可以使用以下"sync"命令来构建奇偶校验信息:

snapraid sync

这个过程可能需要几个小时,这取决于磁盘中已经存在的数据的大小。如果磁盘是空的,则该过程很快完成。

您可以随时按下"Ctrl+C"来停止它,在下一次运行时,它会在中断的地方开始。

当这个命令完成后,你的数据已经是安全的。

现在您可以开始使用阵列,并定期运行"sync"命令来更新奇偶校验信息。

检查数据

要定期检查数据和奇偶校验错误,可以运行以下"scrub"命令:

snapraid scrub

该命令将验证阵列中的数据,并将其与"sync"命令中计算的散列进行比较。命令的每次运行默认检查阵列中8%的数据,但不包括前10天内已经检查过的数据。您可以使用"-p","--plan"选项指定不同的百分比,使用"-o","--older-than"选项调整超过的天数。例如,要检查超过20天的数组的5%,请使用:

snapraid -p 5 -o 20 scrub

如果在此过程中,如果发现静默或IO错误,则相应的块在"content"文件中被标记为坏,可以用"status"命令列出:

snapraid status

要修复他们,可以使用"fix"加上筛选坏块命令"-e","--filter-error"如下:

snapraid -e fix

在下次检查时,如果已经修复,错误将从"status"报告中消失。为了使速度更快,您可以使用"-p bad"命令来只检查坏块。

snapraid -p bad scrub

请注意,在未同步的阵列上运行检查命令,可能会导致由于删除或修改文件引发的错误。这些错误会在检查的结果中报告,但是相关的块不会被标记为坏。

要使阵列中的所有文件都显示在相同的目录中,可以启用"pool"功能。它包括使用符号链接创建阵列中所有文件的只读虚拟视图。

您可以在配置文件中配置"pool"目录:

pool /pool

或者,如果您使用Windows,则使用:

pool C:\pool

然后运行"pool"命令来创建或更新虚拟视图。

snapraid pool

如果您使用的是Unix平台,并且您希望将网络中的此类目录共享到Windows或Unix计算机,则应该在"/etc/samba/smb.conf"中添加以下选项:

1
2
3
4
5
6
7
8
9
10
11
# In the global section of smb.conf
unix extensions = no

# In the share section of smb.conf
[pool]
comment = Pool
path = /pool
read only = yes
guest ok = yes
wide links = yes
follow symlinks = yes

在Windows中,相同的共享操作并不那么简单,因为Windows只共享符号链接,并且需要网络客户端远程解析它们。

为了使其工作,除了在网络中共享池目录之外,还必须共享所有的阵列磁盘,使用配置文件中定义的磁盘名称作为共享点。您还必须在配置文件的"share"选项中指定远程客户端需要用来访问此类共享磁盘的Windows UNC路径。

例如,从名为"darkstar"的服务器进行操作,可以使用以下选项:

1
2
3
4
5
data d1 F:\array\
data d2 G:\array\
data d3 H:\array\
pool C:\pool
share \\darkstar

并在网络中共享以下目录:

1
2
3
4
\\darkstar\pool -> C:\pool
\\darkstar\d1 -> F:\array
\\darkstar\d2 -> G:\array
\\darkstar\d3 -> H:\array

来允许远程客户端访问\\darkstar\\pool中的所有文件。

您可能还需要配置远程客户端,使用以下命令来启用远程符号链接访问:

fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1

恢复删除

SnapRAID比起传统RAID系统,更像备份程序,可以使用"-f","--filter"选项将文件恢复或取消删除以前的状态:

snapraid fix -f FILE

或操作一个目录:

snapraid fix -f DIR/

您也可以使用它恢复目录中的意外删除的文件,使用"-m","--filter-missing"选项,只恢复丢失的文件,不改动所有其他文件。

snapraid fix -m -f DIR/

或者使用以下命令恢复所有驱动器中的所有已删除文件:

snapraid fix -m

恢复数据

最糟糕的事情发生了,你失去了一个或多个磁盘!
不要惊慌!你将能够恢复它们!

你必须做的第一件事是避免你的磁盘阵列进一步的变化。禁用任何远程连接,任何计划的进程,包括任何计划的SnapRAID夜间更新校验数据或检查数据。

然后继续以下步骤:

  1. 步骤1 重新配置

你需要一些空间来恢复,最好你已经有额外的磁盘,也可以使用外部的USB或远程磁盘。更改SnapRAID配置文件,使故障磁盘的"data""parity"选项指向有足够空间来恢复文件的位置。

例如,如果您有磁盘"d1"丢失,您可以把配置文件中的以下行:

data d1 /mnt/disk1/

改为:

data d1 /mnt/new_spare_disk/

如果要恢复的磁盘是奇偶校验磁盘,请更改相应的"parity"选项。如果您有更多损坏的磁盘,请更改其他所有的配置选项。

  1. 第2步 修复

运行修复命令,并将日志存储在外部文件中:

snapraid -d NAME -l fix.log fix

其中NAME是磁盘的名称,如我们前面的示例中的"d1"。如果要恢复的磁盘是奇偶校验盘,请使用"parity","2-parity"等名称。如果您有更多损坏的磁盘,请使用多个"-d"选项来指定所有这些选项。

这个命令需要很长时间。

请注意,您还需要几GB的空间来存储"fix.log"文件。请从有可用空间的磁盘上运行。

现在你已经恢复了所有的可恢复的。如果某个文件部分或全部不可恢复,则会被重命名并添加".unrecoverable"扩展名。

您可以从"fix.log"文件中获取所有不可恢复块的详细列表,检查以"unrecoverable:"开头的所有行。

如果您对恢复不满意,可以多次重试。

例如,如果您在上次"sync"之后从阵列中删除了文件,则可能会导致其他文件无法恢复。在这种情况下,可以使用"-i","--import"选项重试"fix",指定这些文件现在在哪里,以便在恢复过程中再次包含这些文件(以帮助恢复更多内容)。

如果您对恢复感到满意,现在可以继续下一步操作了,但请注意,运行更新冗余信息命令后,您将不能再重试"fix"命令!

  1. 步骤3 检查

如果你偏执的想做检查,您现在可以运行"check"命令,以确保恢复的磁盘一切正常。

snapraid -d NAME -a check

其中NAME是磁盘的名称,如我们前面的示例中的"d1"

选项"-d""-a"指示SnapRAID只检查指定的磁盘,忽略所有奇偶校验数据。

这个命令需要很长时间,但如果你不偏执,你可以跳过它。

  1. 步骤4 同步

运行"sync"命令重新更新新阵列的奇偶信息:

snapraid sync

如果一切都恢复,这个命令会立即完成。

命令

SnapRAID提供了几个简单的命令:

  • "status" 打印阵列的状态
  • "smart","up","down" 控制磁盘
  • "sync" 制作备份或快照
  • "scrub" 定期检查数据
  • "fix" 还原上次的备份或快照

请注意,命令必须用小写形式。

  1. "status"

打印磁盘阵列状态的摘要。

它包含有关奇偶分片的信息,多久没有检查的块,以及在检查过程中遇到的所有有记录的静默错误。

请注意,所显示的信息是在最近一次运行"sync"时引用的。以后的修改不考虑在内。

如果检测到坏块,则列出其编号。要修复它们,你可以使用"fix -e"命令。

它还显示了一个图表,表示每个块的最后一次清理或同步。被检查的块显示为'*',同步但尚未检查的块标为'o'

它不会修改任何数据。

  1. "smart"

打印阵列中所有磁盘的SMART报告。

它包括估计下一年发生故障的可能性,以便计划维护替换显示有可疑属性的磁盘。

获得概率估计是由磁盘的SMART属性与可用的Backblaze数据关联起来: https://www.backblaze.com/hard-drive-test-data.html

如果SMART报告磁盘出现故障,则为该磁盘显示"FAIL""PREFAIL",并且SnapRAID返回错误。在这种情况下,强烈建议立即更换磁盘。

其他可能的字符串是:

字符串 说明
Logfail 过去一些属性低于阈值
Logerr 设备错误日志包含错误
Elferr 设备自检日志包含错误

如果指定了"-v","--verbose"选项,则会提供更深入的统计分析。这种分析可以帮助您决定是否需要更多或更少的奇偶信息。

该命令使用"smartctl"工具,相当于在所有设备上运行"smartctl -a"

如果您的设备未被正确自动检测到,则可以使用配置文件中的"smartctl"选项来配置自定义命令。

它也不会修改任何数据。

  1. "up"

唤醒阵列的所有磁盘。

您可以使用"-d","--filter-disk"选项仅唤醒一些特定的磁盘。

请注意,同时启动所有磁盘需要大量电量。确保您的电源能够维持这一点。

它不会修改任何数据。

  1. "down"

休眠阵列的所有磁盘。

该命令使用"smartctl"工具,相当于在所有设备上运行"smartctl -s standby,now"

您可以使用"-d","--filter-disk"选项仅关闭一些特定的磁盘。

它不会修改任何数据。

  1. "diff"

列出从最后一次"sync"修改过来的需要重新计算奇偶校验数据的所有文件。

该命令不检查文件数据,而只检查文件时间戳大小和inode。

用此命令,您将得到按以下分组的文件更改摘要:

分组 说明
equal 无改动的文件
added 新增的文件
removed 删除的文件
updated 时间戳不一致,已被修改的文件
moved 文件移动到同一磁盘的不同目录,它们由相同的名称、大小、时间戳和inode识别
copied 文件复制到相同或不同磁盘,注意,若文件移动到另一磁盘则被分组为moved
restored 文件具有不同的inode,但是名称、大小和时间戳相同,通常是删除后恢复的文件

如果需要"sync",则程序返回2,而不是默认值0。返回1代表常规错误。

它不会修改任何数据。

  1. "sync"

更新奇偶校验信息。读取磁盘阵列中所有已修改的文件,并更新相应的奇偶校验数据。

您可以随时按"Ctrl+C"来停止此过程,而不会丢失已经完成的工作。在下一次运行时,"sync"过程将在中断的地方开始。

如果在此过程中发现静默或IO错误,则将相应的块标记为坏块。

文件由路径或inode标识,并按大小和时间戳进行检查。如果文件大小或时间戳不同,奇偶校验数据将重新计算整个文件。如果文件在同一个磁盘上移动或重命名且保持相同的inode,奇偶校验不会重新计算。如果文件被移动到另一个磁盘,奇偶校验将被重新计算,但是保留之前计算的哈希信息。

如果有需要,"content"文件和"parity"文件被修改。阵列中的文件不被修改。

  1. "scrub"

检查阵列,检查数据和奇偶校验磁盘中的阵列或IO错误。

每次命令会检查大约8%的阵列数据,但不包括前10天内已经检查过的数据。这意味着每周运行一次检查的话,至少需要每三个月才能完整检查一次数据。

您可以使用"-p","--plan"选项定义一个不同的检查计划,其参数:"bad" 检查标记为不良的块;"new" 只检查刚同步还未检查的块;"full" 检查所有;0-100 检查百分之几的块。

如果您指定百分比数量,则还可以使用"-o","--older-than"选项来定义检查过的时间。最老的数据最先检查,以确保最佳。如果您想要检查刚同步还没检查的块,则应使用"-p new"选项。

要获得检查状态的详细信息,请使用"status"命令。

对于发现的任何静默或IO错误,相应的块会在"content"文件中被标记为坏。这些坏块在"status"中列出,并且可以用"fix -e"来修复。在修复之后,在下一次检查时,他们将被重新检查,如果发现已纠正,坏块标记将被删除。要检查坏块,可以使用"scrub -p bad"命令。

建议只在同步完成的阵列上运行"scrub",以避免由于数据不一致而导致报告错误。这些错误不应该被认为静默错误或标记为坏块,但是这样的错误会输出在报告中。

文件仅由路径标识,而不是由inode标识。

"content"文件被修改以更新每个块的最后一次检查的时间,并标记坏块。"parity"文件不被修改。阵列中的文件也不被修改。

  1. "fix"

修复所有的文件和奇偶校验数据。

将所有文件和奇偶校验数据与上次"sync"中保存的快照状态进行比较。如果发现差异,则将其恢复到存储的快照。

"fix"命令不区分错误和有意修改。它无条件地恢复上次"sync"时的文件状态。

若未指定其他选项,则处理整个阵列。可以使用过滤器选项来选择要操作的文件或磁盘。

如果要仅修复在"sync""scrub"期间标记为不良的块,请使用"-e","--filter-error"选项。与其他过滤器选项的不同之处在于,这个修补程序仅适用于从最新"sync"以来未修改的文件。

所有无法修复的文件都被重命名添加".unrecoverable"扩展名。

在修复之前,会先扫描整个阵列,找到在最近"sync"操作之后的任何移动过的文件。这些文件通过时间戳标识,而忽略它们的名称和目录,并在必要时用于恢复过程。如果您将其中的一些移动到阵列之外,则可以使用"-i","--import"选项指定要扫描的其他目录。

文件仅由路径标识,而不是由inode标识。

"content"文件不被修改。如果需要,会修改"parity"文件。

如果需要,会修改阵列中的文件。

  1. "check"

验证所有的文件和奇偶校验数据。

它类似于"fix",但它只模拟恢复,并没有改变写入阵列。

该命令主要用于手动验证,如恢复过程之后或其他特殊情况。定期和计划检查请使用"scrub"

如果使用"-a","--audit-only"选项,则只会检查文件数据,并且奇偶校验数据将被忽略,以加快运行速度。

文件仅由路径标识,而不是由inode标识。

它不会修改任何数据。

  1. "list"

列出上次"sync"时阵列中包含的所有文件。

它不会修改任何数据。

  1. "dup"

列出所有重复的文件。如果两个文件的哈希匹配,则假定两个文件相等。不读取文件数据,只使用预先计算的哈希值。

它不会修改任何数据。

  1. "pool"

"pool"目录中创建或更新磁盘阵列所有文件的虚拟视图。

这些文件不是真的复制在这里,而是使用符号链接进行连接。

更新时,所有当前的符号链接和空子目录都将被删除,并替换为新的阵列视图。任何其他常规文件都留在原地。

在池目录外没有任何修改。

  1. "devices"

打印阵列使用的低级设备。

该命令在阵列中打印设备关联,主要作为脚本界面。

前两列是低级设备的ID和路径。接下来的两列是高级设备ID和路径。最后一列是阵列中的磁盘名称。

在大多数情况下,阵列中的每个磁盘都有一个低级设备,但在一些更复杂的配置中,阵列中的单个磁盘可能会使用多个低级设备。

它不会修改任何数据。

  1. "touch"

有亚秒时间戳属性且该值为零的所有文件都将设置亚秒时间戳。

亚秒时间戳是比秒级更精确的时间戳,某些文件系统支持亚秒时间戳,如ext4等等。

这提高了SnapRAID识别移动和复制文件的能力,因为它使得时间戳几乎是唯一的,消除了可能的重复。

更具体地说,如果亚秒时间戳不为零,则名称、大小和时间戳相匹配的文件会被标识为movedcopied。如果亚秒时间戳为零,则只有匹配完整路径、大小和时间戳的才应视为拷贝。

请注意,第二个精度时间戳不会被修改,您的文件的所有日期和时间将被保留。

  1. "rehash"

安排整个阵列的重新哈希。

这个命令用于改变所用的哈希类型,通常是从32位系统升级到64位系统时,或者从MurmurHash3切换到更快的SpookyHash

如果你已经使用了最佳散列,这个命令什么也不做,并告诉你没有什么需要做的。

"rehash"不是立即完成,而是在"sync""scrub"过程中逐步进行。

您可以使用"status"来获得"rehash"的状态。

"rehash"期间,SnapRAID保持完整的功能,唯一的例外是"dup"不能使用不同的散列来检测重复的文件。

Options选项

SnapRAID提供以下选项:

  • "-c","--conf" CONFIG

选择要使用的配置文件。如果没有在Unix中指定,则使用"/usr/local/etc/snapraid.conf",或者使用"/etc/snapraid.conf"。在Windows中,它使用"snapraid.exe"相同目录中的文件"snapraid.conf"

  • "-f","--filter" PATTERN

"check""fix"中筛选要处理的文件。只有匹配指定模式的文件才会被处理。该选项可以使用多次。有关模式规范中的更多详细信息,请参阅PATTERN部分。在Unix中,确保用引号保护通配符(如果使用)。该选项只能用于"check""fix"。请注意,它不能与"sync""scrub"一起使用,因为它们总是处理整个阵列。

  • "-d","--filter-disk" NAME

"check","fix","up""down"命令中用以过滤磁盘。您必须指定一个配置文件中使用的硬盘名称。您还可以指定奇偶校验磁盘,名称为"parity","2-parity","3-parity"等等以限制特定奇偶校验磁盘的操作。如果结合使用更多的"--filter","--filter-disk""--filter-missing"选项,则只会选择与所有过滤器组匹配的文件。该选项可以使用多次。此选项只能用于"check","fix","up""down"。请注意,它不能与"sync""scrub"一起使用,因为它们总是处理整个阵列。

  • "-m","--filter-missing"

"check""fix"中筛选要处理的文件。只处理阵列中丢失与被删除的文件。与"fix"一起使用时,这是一种"undelete"命令。如果结合使用更多的"--filter","--filter-disk""--filter-missing"选项,则只会选择与所有过滤器组匹配的文件。该选项只能用于"check""fix"。请注意,它不能与"sync""scrub"一起使用,因为它们总是处理整个阵列。

  • "-e","--filter-error"

"check""fix"过程中筛选块。它只处理在"sync""scrub"期间被标记为静默错误或IO错误的块,并在"status"中列出。该选项只能用于"check"和`"fix"。

  • "-p","--plan" [PERC|bad|new|full]

选择检查计划。如果PERC是从0到100的数字值,则将其解释为要检查块的百分比。除了百分比之外,您也可以指定一个计划:bad检查坏块;new检查新块;full则是所有的块。该选项只能用于"scrub"

  • "-o",--older-than" DAYS

"scrub"处理阵列的较旧部分。DAYS是要检查块的最小时间(以天为单位),默认为10。标记为"bad"的块总是被检查。该选项只能用于"scrub"

  • "-a","--audit-only"

"check"中验证文件的hash,而不对奇偶校验数据进行任何类型的检查。如果你只想检查文件数据,这个选项可以加快检查过程。该选项只能用于"check"

  • "-h","--pre-hash"

"sync"中做所有新数据的初步哈希阶段,以便在奇偶校验计算之前进行额外的验证。通常在"sync"中,不会进行初步哈希处理,并且新数据在首次读取时在奇偶校验计算之前进行哈希处理。不幸的是,这个过程发生在系统负载很重时,所有的磁盘都在旋转并且CPU繁忙。这是机器的极端情况,如果它有潜在的硬件问题,可能会遇到由于数据尚未hash而无法检测到的静默错误。为了避免这种风险,您可以启用"pre-hash"模式,并将所有数据读取两次以确保其完整性。该选项还可以验证在阵列中文件的移动,以确保移动操作成功完成,并且可以阻止同步以允许运行修复操作。该选项只能用于"sync"

  • "-i","--import" DIR

从指定目录导入在最后一次"sync"之后从阵列中删除的任何文件。如果你仍然有这样的文件,可以通过"check""fix"来改善恢复过程。这些文件在子目录中也可以被读取,不以文件名来识别。该选项只能用于"check""fix"

  • "-Z","--force-zero"

强制不安全的操作以同步大小为零的文件(以前非零大小)。如果SnapRAID检测到这种情况,除非您指定此选项,否则会停止继续。这允许在系统崩溃之后轻松检测到一些被访问的破损文件。在Linux中使用"ext3/ext4"文件系统,可能会遇到这种情况。该选项只能用于"sync"

  • "-E","--force-empty"

强制进行不安全操作(同步所有原始文件丢失的磁盘)。如果SnapRAID检测到原本存在于磁盘中的所有文件都丢失或重写,则除非您指定此选项,否则它将停止处理。这样可以轻松检测数据文件系统是否已经挂载。该选项只能用于"sync"

  • "-U","--force-uuid"

强制进行不安全操作(检查并修复那些已经更改UUID的磁盘)。如果SnapRAID检测到某些磁盘已更改UUID,则除非您指定此选项,否则它将停止处理。这允许检测您的磁盘是否在错误的挂载点。无论如何,在单个奇偶校验盘的情况下只允许一个UUID的改变,多个奇偶校验盘则可以有更多个UUID改变,因为这是在恢复后更换磁盘的正常情况。此选项只能用于"sync","check""fix"

  • "-D","--force-device"

强制进行不安全操作(修复不可访问的磁盘或者在同一个物理磁盘做修复操作)。比如丢失了两个数据磁盘,但您只有一个空闲磁盘想要恢复第一个数据盘,而忽略第二个不可访问的磁盘。或者,如果您要在已使用的磁盘的剩余空间中恢复磁盘,则共享相同的物理设备。该选项只能用于"fix"

  • "-N","--force-nocopy"

"sync","check""fix"中,强制地认为没有数据副本。如果没有这个选项,SnapRAID会假设具有相同属性(如名称、大小和时间戳)的文件都是相同数据的拷贝,这允许识别那些从一个磁盘到另一个磁盘的movedcopied文件,并且复用已经计算过的哈希信息来检测静默错误或恢复丢失文件,在极少数情况下,这种行为可能会导致误报,或者由于过多哈希验证而变慢,这个选项可以解决这个问题,这个选项只能用于"sync","check""fix"

  • "-F","--force-full"

"sync"中,强制完全重新计算奇偶校验。这个选项可以在添加新的奇偶校验级别时使用,也可以在使用较新的奇偶校验数据来回退到较旧的"content"文件时使用。这不是从头开始重新创建奇偶校验,而是允许复用"content"文件中存在的哈希来验证数据,并在"sync"过程中使用您拥有的奇偶校验数据来维持数据保护。此选项只能用于"sync"

  • "-R","--force-realloc"

"sync"中,强制完全重新分配文件并重建奇偶校验。此选项可用于完全重新分配所有文件同时删除碎片,但复用"content"文件中存在的哈希以验证数据。该选项只能用于"sync"。警告!此选项仅适用于"专家",而且非常建议不要使用它。 在"sync"操作期间,您将失去数据保护。

  • "-l","--log" FILE

在指定的文件中记录详细的日志。如果未指定此选项,则会在屏幕上打印出现意外的错误(如果出现很多错误,可能会导致输出太多)。当在指定"-l","--log"时,屏幕上只显示令SnapRAID停止处理的致命错误。如果FILE是以">>"为起始的路径,则文件以追加模式打开。文件名中的"%D""%T"会被替换为YYYYMMDDHHMMSS格式的日期和时间。请注意,在Windows批处理文件中,您必须重复'%'字符(例如"%%D.log")。要使用">>",你必须把文件名一起放在引号中,例如">>result.log"。要输出日志到standard outputstandard error,你可以分别使用">&1"">&2"

  • "-L","--error-limit"

在停止执行之前设置新的错误限制。默认情况下,如果SnapRAID遇到超过100个IO错误就会停止,表示可能磁盘即将损坏。这个选项会影响"sync""scrub",在第一批磁盘错误之后允许继续执行,以尝试尽量完成其操作。相反,"check""fix"遇到第一个错误总会停止。

  • "-S","--start" BLKSTART

从指定的块号开始处理。在磁盘损坏的情况下,重新检查或修复某些特定块可能会有用。这目前主要用于高级手动恢复。

  • "-B","--count" BLKCOUNT

只处理指定数量的块。目前主要用于高级手动恢复。

  • "-C","--gen-conf" CONTENT_FILE

从现有的"content"文件生成一个虚拟配置文件。配置文件写入到standard output,不会覆盖现有配置文件。此配置文件还包含了重建磁盘所需的硬盘挂载点信息,以防你丢失了整个系统。

  • "-v","--verbose"

在屏幕上打印更多信息。一旦指定,则会打印排除的文件和更多的统计数据。该选项对日志文件没有影响。

  • "-q","--quiet"

在屏幕上打印较少信息。若指定了一次,则删除进度条,若指定两次,则不显示正在运行的操作,若指定三次,则不显示信息消息,若指定四次,则不显示状态消息。致命的错误总是显示在屏幕上。该选项对日志文件没有影响。

  • "-H","--help"

在屏幕上打印一个简短的帮助。

  • "-V","--version"

打印程序版本信息。

配置

SnapRAID需要配置文件来知道您的磁盘阵列所在的位置以及存储奇偶校验信息的位置。

在Unix中,如果存在,则使用文件"/usr/local/etc/snapraid.conf",否则使用"/etc/snapraid.conf"。在Windows中,它使用"snapraid.exe"相同目录中的文件"snapraid.conf"

它应该包含以下选项(区分大小写):

  1. parity FILE [,FILE] ...

定义用于存储奇偶校验信息的文件。奇偶校验可以防止单个磁盘故障,如RAID5。

您可以指定不同磁盘中的多个文件。当一个文件不能再增长时,则会使用下一个文件。可用的总空间必须与阵列中最大的数据磁盘一样大。

请预留奇偶校验磁盘,确保它不会被分割,以提高性能。

在Windows中,每个磁盘中都会预留256MB的空间,以避免出现有关磁盘满的警告。

该选项是强制性的,只能使用一次。

  1. (2,3,4,5,6)-parity FILE [,FILE] ...

定义用于存储额外奇偶校验信息的文件。

对于指定的每个奇偶校验,启用一个额外级别的保护:

  • "2-parity"允许类似RAID6的双奇偶校验
  • "3-parity"允许三奇偶校验
  • "4-parity"允许四奇偶校验
  • "5-parity"允许五奇偶校验
  • "6-parity"允许六奇偶校验

每个奇偶级别均需要启用之前所有的级别。

"parity"选项的相同考虑因素也适用。

这些选项是可选的,只能使用一次。

  1. z-parity FILE [,FILE] ...

定义一个替代的文件和格式来存储三重奇偶校验。

这个选项是"3-parity"的替代方案,主要用于ARM或AMD Phenom平台Athlon和Opteron等不支持SSSE3指令集的低端CPU。在这种情况下,它提供了更好的性能。

这种格式与ZFS RAIDZ3使用的格式相似,但速度更快。像ZFS一样,它不能超过三重校验。

当使用"3-parity"时,如果建议使用"z-parity"格式来提高性能,将会被通知。

可以从一种格式转换为另一种格式,只需要调整配置文件,并使用"fix"重新创建它。

  1. content FILE

定义用于存储磁盘阵列中存在的所有文件的列表和校验和的文件。

它可以放在数据盘,奇偶校验盘或任何其他可用磁盘的磁盘上。如果您使用数据盘,、 该文件将自动从"sync"过程中排除。

此选项是强制性的,可以多次使用以保存更多的这个文件的副本。

您必须为每个奇偶校验盘存储至少一个这份文件的拷贝。多保存几个没有坏处。

  1. data NAME DIR

定义阵列数据磁盘的名称和挂载点。NAME用来标识磁盘,它必须是唯一的。DIR是文件系统中磁盘的挂载目录。

您可以随意更改挂载点,只要保持NAME固定即可。

您应该为阵列的每个数据磁盘使用一个此选项。

您稍后可以直接在配置文件中更改NAME以重命名磁盘,然后运行"sync"命令。在重命名的情况下,是使用磁盘存储的UUID来完成关联的。

  1. nohidden

排除所有隐藏的文件和目录。在Unix中,隐藏文件是以"."开头的文件。在Windows中,他们是隐藏的属性。

  1. exclude/include PATTERN

定义要排除或包含在"sync"过程中的文件或目录。所有模式都按照指定的顺序处理。

如果匹配的第一个模式是"exclude"模式,则排除该文件。如果是"include",则包含该文件。假如PATTERN都没有匹配文件,如果指定的最后一个模式是"include",则排除该文件;如果指定的最后一个模式是"exclude",则包含该文件。

有关模式规范中的更多详细信息,请参阅PATTERN部分。

该选项可以使用多次。

  1. blocksize SIZE_IN_KIBIBYTES

定义奇偶校验数据的基本块大小(以KB为单位)。一个KB字节是1024个字节。

默认块大小是256KB,它应该适用于大多数情况。

警告!此选项仅供"专家"使用,强烈建议不要更改。将来若要更改此值,您将不得不重新创建整个校验!

如果你有大量的小文件,可以使用不同的散列尺寸,以应对数以百万计的小文件。

对于每个文件,即使是很小的字节,也会分配一整块奇偶校验,对于许多文件,这可能会导致大量未使用的奇偶校验空间。当您完全填满奇偶校验磁盘后,您将不允许在数据盘中添加更多文件。无论如何,浪费的奇偶校验空间不会在数据磁盘之间统计。由于数据磁盘中的大量文件而导致的空间浪费,只限制此类数据磁盘中的数据量,而不限制其他。

作为近似值,您可以假定每个文件都浪费了一半的块大小。例如,对于100000个文件和256KB的块大小,您将浪费13GB的奇偶校验,这可能导致数据磁盘中的可用空间减少13GB。

您可以使用"status"来获取每个磁盘中的浪费空间量。这是您必须在数据盘中保留的空间量,或者用于未包含在阵列中的文件。如果这个值是负值,那就意味着你已经接近填满奇偶盘了,它代表了你仍然可以浪费的空间。

为了避免这个问题,你可以使用一个更大的分区进行奇偶校验。例如,如果您的奇偶校验盘比数据磁盘要大13GB,则您有足够的额外空间来处理每个数据磁盘中最多100000个文件。

在Linux中获得更大的奇偶校验分区的一个技巧是使用以下命令对其进行格式化:

mkfs.ext4 -m 0 -T largefile4 DEVICE

这将产生约1.5%的额外空间。对于一个4TB的磁盘来说,大约有60GB的容量,每个数据磁盘允许大约460000个文件,而没有任何浪费的空间。

  1. hashsize SIZE_IN_BYTES

定义保存块的散列大小(以字节为单位)。

默认的散列大小是16个字节(128位),它应该适用于大多数情况。

警告!此选项仅供专家使用,强烈建议不要更改。将来若要更改此值,您将不得不重新创建整个校验!

您的系统内存过小从而需要其他散列大小。根据经验,SnapRAID通常需要为阵列中的每个16TB数据提供1GiB的RAM内存。

具体而言,为了存储数据的散列,SnapRAID需要关于RAM存储器的"TS*(1+HS)/BS"字节。其中,TS是以字节为单位的磁盘阵列总大小,BS是以字节为单位的块大小,HS是以字节为单位的散列大小。

例如,如果有8个4TB的磁盘和256KB的块大小,并且散列大小为16B,则会得到:

RAM = (8 * 4 * 10 ^ 12) * (1 + 16) / (256 * 2 ^ 10) = 1.93 GiB

切换到8B的散列大小,你会得到:

RAM = (8 * 4 * 10 ^ 12) * (1 + 8) / (256 * 2 ^ 10) = 1.02 GiB

切换到512KB的块大小,你会得到:

RAM = (8 * 4 * 10 ^ 12) * (1 + 16) / (512 * 2 ^ 10) = 0.96 GiB

切换到8B的散列大小,512KB的块大小,你会得到:

RAM = (8 * 4 * 10 ^ 12) * (1 + 8) / (512 * 2 ^ 10) = 0.51 GiB
  1. autosave SIZE_IN_GIGABYTES

在处理完指定几GB的数量之后自动保存"sync""scrub"时的状态。此选项可用于避免从头开始长时间的"sync"命令(由于机器崩溃或任何其他会中断SnapRAID的事件导致的)。

  1. pool DIR

定义使用"pool"命令创建的磁盘阵列虚拟视图的池化目录。

该目录必须已经存在。

  1. share UNC_DIR

定义远程访问磁盘所需的Windows UNC路径。

如果指定了此选项,则在池目录中创建的符号链接将使用此UNC路径来访问磁盘。如果没有这个选项,生成的符号链接只使用本地路径,不允许共享网络中的池目录。

符号链接使用指定的UNC路径形成,添加"disk"选项中指定的磁盘名称,最后添加文件目录和名称。

此选项仅适用于Windows。

  1. smartctl DISK/PARITY OPTIONS...

定义客制化的smartctl命令以获取每个磁盘的SMART属性。 RAID控制器和某些无法自动检测到的USB磁盘可能需要使用此功能。

DISK"disk"选项中指定的磁盘名称相同。PARITY则是"parity","(1,2,3,4,5,6,z)-parity"选项指定的奇偶校验名称的其中之一。

在指定的OPTIONS中,"%s"字符串会被替换为设备名称。请注意,如果使用RAID控制器,设备可能已经修复,那样您不必使用"%s"

关于可能的选项,请参阅smartmontools文档:

https://www.smartmontools.org/wiki/Supported_RAID-Controllers

https://www.smartmontools.org/wiki/Supported_USB-Devices

  1. 示例

Unix的一个典型配置的例子是:

1
2
3
4
5
6
7
8
9
10
11
12
parity /mnt/diskp/snapraid.parity
content /mnt/diskp/snapraid.content
content /var/snapraid/snapraid.content
data d1 /mnt/disk1/
data d2 /mnt/disk2/
data d3 /mnt/disk3/
exclude /lost+found/
exclude /tmp/
smartctl d1 -d sat %s
smartctl d2 -d usbjmicron %s
smartctl parity -d areca,1/1 /dev/sg0
smartctl 2-parity -d areca,2/1 /dev/sg0

Windows的典型配置的一个例子是:

1
2
3
4
5
6
7
8
9
10
11
12
13
parity E:\snapraid.parity
content E:\snapraid.content
content C:\snapraid\snapraid.content
data d1 G:\array\
data d2 H:\array\
data d3 I:\array\
exclude Thumbs.db
exclude \$RECYCLE.BIN
exclude \System Volume Information
smartctl d1 -d sat %s
smartctl d2 -d usbjmicron %s
smartctl parity -d areca,1/1 /dev/arcmsr0
smartctl 2-parity -d areca,2/1 /dev/arcmsr0

Pattern模式

模式用于选择要排除或包含在过程中的文件子集。

有四种不同类型的模式:

  1. FILE

选择任何名为FILE的文件。你可以使用像'*''?'这样的通配符,以及像"[a-z]"这样的字符类。这种模式只适用于文件而不适用于目录。

  1. DIR/

选择任何名为DIR的目录和里面的一切。您可以使用'*''?'这样的通配符。这种模式只适用于目录而不适用于文件。

  1. /PATH/FILE

选择确切的指定文件路径。你可以使用'*''?'这样的通配符(但他们不匹配目录斜杠)。这种模式只适用于文件而不适用于目录。

  1. /PATH/DIR/

选择确切的指定目录路径和里面的一切。'*''?'这样的通配符(但他们不匹配目录斜杠)。这种模式只适用于目录而不适用于文件。

请注意,当您指定以'/'开头的绝对路径时,它将应用于阵列根目录而不是在本地文件系统的根目录。

在Windows中,您应该使用反斜杠'\'而不是正斜杠'/'。请注意,Windows系统目录、链接、挂载点和任何其他Windows特殊目录都被视为文件,这意味着要排除它们,您必须使用文件规则,而不是目录。

如果您要使用的文件名确实包含'*','?','['']'字符,则必须将其转义以避免将其解释为通配符。在Unix中,转义字符是'\',在Windows中是'^'。请注意,当模式位于命令行上时,必须将转义字符重复,以避免由命令行对其进行解释。

在配置文件中,可以使用不同的策略来过滤要处理的文件。最简单的方法是只使用"exclude"规则来过滤掉所有不想处理的文件和目录。例如:

1
2
3
4
5
6
# Excludes any file named "*.unrecoverable"
exclude *.unrecoverable
# Excludes the root directory "/lost+found"
exclude /lost+found/
# Excludes any sub-directory named "tmp"
exclude tmp/

相反的方法是仅使用"include"规则来定义要处理的文件。例如:

1
2
3
4
# Includes only some directories
include /movies/
include /musics/
include /pictures/

还有是混合"exclude""include"规则。在这种情况下,要注意规则的顺序很重要。前面的规则优先于后面的规则。为了使事情更简单,您可以先使用所有"exclude"规则,再使用所有"include"规则。例如:

1
2
3
4
5
6
7
8
# Excludes any file named "*.unrecoverable"
exclude *.unrecoverable
# Excludes any sub-directory named "tmp"
exclude tmp/
# Includes only some directories
include /movies/
include /musics/
include /pictures/

在命令行上,使用"-f"选项,只能使用"include"模式。例如:

1
2
3
# Checks only the .mp3 files.
# Note the "" use to avoid globbing expansion by the shell in Unix.
snapraid -f "*.mp3" check

在Unix中,当在命令行中使用通配符时,必须用引号保护。否则,shell将尝试扩展它们。

Content列表信息

SnapRAID将文件的列表和校验和存储在"content"文件中。

这是一个二进制文件,列出磁盘阵列中存在的所有文件和其校验码以验证其完整性。

这个文件由"sync""scrub"命令读写,并由"fix","check""status"读取。

Parity奇偶信息

SnapRAID将阵列的奇偶校验信息存储在奇偶校验文件中。

它们是二进制文件,包含"content"文件中定义的所有块的奇偶校验数据。

这些文件是由"sync""fix"命令读写,并且只能通过"scrub""check"读取。

Encoding编码

Unix中的SnapRAID忽略任何字符编码。它使用文件系统使用的相同编码来读取和存储文件名。

在Windows中,从文件系统读取的所有名称都将以UTF-8格式进行转换和处理。

要使文件名正确打印,必须使用命令"chcp 65001"UTF-8模式设置Windows控制台,并使用"Lucida Console"等TrueType字体作为控制台字体。请注意,它只对打印的文件名有效,如果将控制台输出重定向到文件,则生成的文件将始终为UTF-8格式。


SnapRAID手册
https://blog.siantao.top/手册/SnapRAID/SnapRAID手册/
作者
玉水仙楊
发布于
2023年5月26日
许可协议