Table of Contents
NAS - Build a Linux NAS - Prepare the RAID Disks
Determine the available disks
lsblk
returns:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 232.9G 0 disk ├─sda1 8:1 0 1007K 0 part ├─sda2 8:2 0 512M 0 part /boot/efi ├─sda3 253:28 0 8G 0 part [SWAP] ├─sda4 253:29 0 58G 0 part / sdb 8:32 0 14.6T 0 disk sdc 8:48 0 14.6T 0 disk sdd 8:64 0 14.6T 0 disk
NOTE: This shows:
- sda: The boot disk of the host OS. Leave this alone!
- sdb: A free disk.
- sdc: A free disk.
- sdd: A free disk.
The free disks do not have any partitions yet and will be included into a RAID.
Obtain the Serial Numbers of the Disks
hdparm -i /dev/sdd | grep SerialNo
returns:
Model=ST16000NM001G-2KK103, FwRev=SB30, SerialNo=WL2091XL
IMPORTANT: Obtain the serial number for every disk; and keep a record of this somewhere safe.
NOTE: Many disks also have the serial number written on the disk.
The reason for recording the serial number of each disk is that in the case of a disk failure, there needs to be a way to determine which disk has failed and needs to be replaced.
- The enclosure being used for the disks may not support hot-swapping and there may not be a separate light for each disk, so there may not be a straight-forward way to determine which specific disk has failed.
Test the Disks
All hard drives, both new and old, should be tested before adding them to an array.
See S.M.A.R.T. to view smart data and run smart tests.
Do a short smart test:
smartctl -t short /dev/sdb [-d sat]
Do a long smart test:
smartctl -t long /dev/sdb [-d sat]
Check all smart attributes:
smartctl -a /dev/sdb [-d sat]
Do a random readwrite test:
sudo fio --filename="/dev/sdb --name=randwrite --ioengine=sync --iodepth=1 --rw=randrw --rwmixread=50 --rwmixwrite=50 --bs=4k --direct=0 --numjobs=8 --size=300G --runtime=7200 --group_reporting
NOTE: The smartmontools package might be needed to be installed:
sudo apt install smartmontools
- -d sat: Sata disks.
Initialize the free disks
sudo fdisk /dev/sdb
returns:
Welcome to fdisk (util-linux 2.36.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. The size of this disk is 14.6 TiB (16000900661248 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT). Created a new DOS disklabel with disk identifier 0xc778227a. Command (m for help):
Create a GPT Partition
Command (m for help): g
returns:
Created a new GPT disklabel (GUID: 6D811672-A5FE-BA4F-8F79-D17E0285C5E1).
NOTE: GPT (GUID Partition Table) is much better than MBR (Master Boot Record) partitions:
- GPT supports much larger disks.
- GPT allows for a nearly unlimited number of partitions.
- GPT also stores cyclic redundancy check (CRC) values to check that its data is intact.
- If the data is corrupted, GPT can notice the problem and attempt to recover the damaged data from another location on the disk.
Create a Linux RAID Partition
Command (m for help): n Partition number (1-128, default 1): First sector (2048-31251759070, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-31251759070, default 31251759070):
returns:
Created a new partition 1 of type 'Linux filesystem' and of size 14.6 TiB.
NOTE: Just taking the default values uses the entire disk.
Print the Partition
Command (m for help): p
returns:
Disk /dev/sdb: 14.55 TiB, 16000900661248 bytes, 31251759104 sectors Disk model: ST16000NM001G-2K Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: gpt Disk identifier: 6D811672-A5FE-BA4F-8F79-D17E0285C5E1 Device Start End Sectors Size Type /dev/sdb1 2048 31251759070 31251757023 14.6T Linux filesystem
NOTE: This shows that there is a single partition, /dev/sdb1, using the entire disk.
Change the Partition Type
Command (m for help): t Selected partition 1 Partition type or alias (type L to list all): 29
returns:
Changed type of partition 'Linux filesystem' to 'Linux RAID'.
NOTE: The type is changed to Linux RAID, which is type 29.
Print the Partition again
Command (m for help): p
returns:
Disk /dev/sdd: 14.55 TiB, 16000900661248 bytes, 31251759104 sectors Disk model: ST16000NM001G-2K Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disklabel type: gpt Disk identifier: EAA2F832-9810-AA45-9DDB-8ED531C20139 Device Start End Sectors Size Type /dev/sdd1 2048 31251759070 31251757023 14.6T Linux RAID
NOTE: This shows the Type has been changed to Linux RAID.
Write the Partition Table
Command (m for help): w
returns:
The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
Partition other Disks
NOTE: Repeat the above instructions for the other free disks.
Check the available disks again
lsblk
returns:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 232.9G 0 disk ├─sda1 8:1 0 1007K 0 part ├─sda2 8:2 0 512M 0 part /boot/efi ├─sda3 253:28 0 8G 0 part [SWAP] ├─sda4 253:29 0 58G 0 part / sdb 8:32 0 14.6T 0 disk ├─sdb1 8:33 0 14.6T 0 part sdc 8:48 0 14.6T 0 disk ├─sdc1 8:49 0 14.6T 0 part sdd 8:64 0 14.6T 0 disk ├─sdd1 8:65 0 14.6T 0 part
NOTE: This shows the original free disks all now have partitions.
- At this point, these disks can be tied together as a RAID array.