Difference between revisions of "SnapRAID / MergerFS"

From Briki
Jump to: navigation, search
(Identifying/Fixing a bad block)
(Identifying/Fixing a bad block)
Line 37: Line 37:
 
</pre>
 
</pre>
 
* ddrescue will write out a map file containing start positions and sizes (all in bytes). Look for lines ending "-", and convert the hex positions to decimal (we'll call this '''P''')
 
* ddrescue will write out a map file containing start positions and sizes (all in bytes). Look for lines ending "-", and convert the hex positions to decimal (we'll call this '''P''')
* Get the block size for the disk with <code>tune2fs -l /dev/sdX | grep "Block size"</code> (we'll call this '''B''')
+
* Get the block size for the disk with <code>tune2fs -l /dev/sdX | grep "Block size"</code> (we'll call this '''B'''). In my case this is 4096.
* Get the sector size for the disk with <code>fdisk -l /dev/sdX | grep Units</code> (we'll call this '''S''')
+
* Get the sector size for the disk with <code>fdisk -l /dev/sdX | grep Units</code> (we'll call this '''S'''). In my case this is 512.
* Identify the starting sector for the /dev/sdXY volume (eg. /dev/sda1) with <code>fdisk -l /dev/sdX</code> (we'll call this '''T''')
+
* Identify the starting sector for the /dev/sdXY volume (eg. /dev/sda1) with <code>fdisk -l /dev/sdX</code> (we'll call this '''T'''). In my case this is 2048.
 
* To work out the volume block from the ddrescue position we need to calculate <code>(P - (T * S)) / B</code>
 
* To work out the volume block from the ddrescue position we need to calculate <code>(P - (T * S)) / B</code>
  

Revision as of 15:39, 7 March 2022

SnapRAID / MergerFS

Setup

https://zackreed.me/setting-up-snapraid-on-ubuntu/

Note that if (like me) you use a dedicated snapraid content directory then you'll need to create that by hand for each disk with:

 mkdir /mnt/data/disk1/.snapraid

Partitioning a new data disk

Note: "-m 2" here reserves 2% of the filesystem for root-owned files (eg. .../.snapraid/content)

 sudo parted -a optimal -s /dev/sdX -- mklabel gpt mkpart primary 0% 100%
 sudo mkfs.ext4 -m 2 -T largefile4 /dev/sdX1

Partitioning a new parity disk

Note: "-m 0" here reserves 0% of the filesystem, ensuring that the parity disks are slightly larger than the data disks

 sudo parted -a optimal -s /dev/sdX -- mklabel gpt mkpart primary 0% 100%
 sudo mkfs.ext4 -m 0 -T largefile4 /dev/sdX1

Adding a new data disk to mergerfs

From: https://zackreed.me/mergerfs-neat-tricks/ From within the root of the mergerfs filesystem (eg. /srv)

 xattr -w user.mergerfs.srcmounts '+>/mnt/data/disk4/srv' .mergerfs

Removing a data disk from mergerfs

From within the root of the mergerfs filesystem (eg. /srv)

 xattr -w user.mergerfs.srcmounts '-/mnt/data/disk4/srv' .mergerfs

Forcing a resync

 sudo snapraid sync

Identifying/Fixing a bad block

  • Run ddrescue to identify the failing bytes on the disk:
ddrescue --ask --verbose --binary-prefixes --idirect --force /dev/sdX /dev/null sdX.map 
  • ddrescue will write out a map file containing start positions and sizes (all in bytes). Look for lines ending "-", and convert the hex positions to decimal (we'll call this P)
  • Get the block size for the disk with tune2fs -l /dev/sdX | grep "Block size" (we'll call this B). In my case this is 4096.
  • Get the sector size for the disk with fdisk -l /dev/sdX | grep Units (we'll call this S). In my case this is 512.
  • Identify the starting sector for the /dev/sdXY volume (eg. /dev/sda1) with fdisk -l /dev/sdX (we'll call this T). In my case this is 2048.
  • To work out the volume block from the ddrescue position we need to calculate (P - (T * S)) / B

More details: