I am about to set up box to basically be a file server. I plan on having multiple drives in the box, and would like to set them all up so that they appear to be a single drive. So I could essentially have it mounted at say /media and not really care which drive gets used. I am not sure what the correct terminology for doing this is, so my Google fu is useless in this situation.
So how do I set up multiple hard drives to appear as one single drive?
I decided to write the step by step directions that I did to set this up. An important note is that I did this on a system where I boot from a separate partition that is not part of the LVM. So the LVM is simply for storage and does not have any of the files needed by the OS to boot. Also this is to create the appearance of one large drive, although a similar technique can be used to create the appearance of multiple drives (well partitions really). It is a very selfish brain dump since the other guides do not all that complete to me. So I hope it can help others.
These directions are essentially from the link provided by Murat Gunes with some more information I gathered from here.
I started with a disk that I did not have anything on it that I needed.
sudo fdisk -l
The first line in each section should give you enough information to identify your drive. It will look like:
The part that matters is
/dev/sda
. Now run:sudo fdisk /dev/sda
. You will see:Type
p
to list the partitions on your drive. You need to delete the partitions that you want to make part of the LVM. So typed
to delete. If the drive only has one partition it will remove it (well flag it for removal, it does not happen until we tell it to do it). Otherwise I think (mine only had one) it asks you to enter the number of the one you want to delete.Now you need to create the new parition. Type
n
for new. It asks whether extended or primary. Typep
for primary. It asks for partition number, type 1. For first cylinder and last cylinder just leave them blank to use the defaults.Now you need to set it to Linux LVM. Type
t
. It asks for a hex code, use8e
for the Linux LVM. You shoule see something like:Finally type
w
to write out the changes to the disk.sudo apt-get install lvm2
to install it.modprobe dm-mod
to Load the LVM Module. I did not get any errors so I figure it worked.sudo nano /etc/modules
to open it up to edit. Adddm-mod
to the list of items. If this file is empty or does not exist, simply adddm-mod
as a single line to the file.sudo nano -w /etc/lvm/lvm.conf
and change the line with:to be:
sudo vgscan
. You should see something like:Just in case there are any volume groups already set up run
sudo vgchange -a y
to make them available.sudo pvcreate /dev/sda1
to set up the partition.sudo vgcreate media /dev/sda1
replacingmedia
with the name you want the partition to be labeled as.sudo lvcreate -l100%FREE -nvolume media
replacingvolume
with the name you want it to be called. This will use all the free space available in the partition.sudo mke2fs -t ext4 /dev/media/volume
.sudo mkdir /mnt/media
.sudo mount /dev/media/volume /mnt/media
. Now this is only for this session. When you reboot it will not be remounted automatically. To do that we need to edit/etc/fstab
file. To do this addsudo nano /etc/fstab
and add the line:At this point you could start adding files to the disk, so if you need to clear other disks you want to add you could copy them on here.
Adding another drive to your volume
/dev/sdb1
then dosudo vgextend media /dev/sdb1
to add it to the volume.sudo umount /dev/media/volume
.sudo vgdisplay
. The important part isFree PE / Size
. You need to know how much space you can add to the volume for the next step.sudo lvextend -L+150G /dev/media/volume
.sudo e2fsck -f /dev/media/volume
to check the filesystem.sudo resize2fs /dev/media/volume
to resize everything.Free PE / Size
has dropped to what you expect.sudo mount /dev/media/volume /mnt/media
Also something that I found helpful was I had files I needed to copy off of disks to the LVM I created before I added that disk. So I used `cp -r -v` so that it would recursively copy files and use the verbose output so I know what it was doing. An example of the full command would be:
Where
/mnt/temp/Movies
is the folder you want to copy from.You'll probably want to use LVM. You can find some guides here.
Personally I would make sure all drives are (about) the same size, and create a RAID 5 "array" from them instead. The disadvantage of RAID 5 is that you lose the size of one disk in total available diskspace. The advantage of RAID 5 is that if one of your disks dies, you don't lose a thing, and you can simply replace the broken HDD.
If you don't care enough about losing data to spend an extra disk on it, or if you were planning to use a bunch of disks of different sizes you already have, it's probably best to use LVM, as Murat says.