====== 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.
See: https://www.smartmontools.org/
----
===== 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.