I have a usb drive, that I need to have mounted automatically every time I boot in to Linux.
The first thing I do is create mount point, a directory in /mnt
sudo mkdir /mnt/DRV1

I then run lsblk. From the man page:

lsblk lists information about all available or the specified block
devices.  The lsblk command reads the sysfs filesystem and udev db to
gather information. If the udev db is not available or lsblk is
compiled without udev support than it tries to read LABELs, UUIDs and
filesystem types from the block device. In this case root permissions
are necessary.
Running lsblk gives me an out put like this:

 ➜ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk
├─sda1   8:1    0   549M  0 part
├─sda2   8:2    0 243.6G  0 part
├─sda3   8:3    0    20G  0 part [SWAP]
└─sda4   8:4    0 201.6G  0 part /
sdb      8:16   0   1.8T  0 disk
└─sdb1   8:17   0   1.8T  0 part
sr0     11:0    1  1024M  0 rom

So I can see that my 2Tb drive is listed as sdb. Which means that it lives at /dev/sdb

If the drive is new and I need to format it for ext4 for example, I would have to run fdisk, as root
sudo fdisk /dev/sdb
Then create partitions as required, by following the menu options.
once the partition table is complete, write it do disk.
I have one partition. The information about this can be obtained by the i option in the fdisk menu:

Command (m for help): i
Selected partition 1
Device: /dev/sdb1
Start: 2048
End: 3907029166
Sectors: 3907027119
Cylinders: 777983
Size: 1.8T
Id: 83
Type: Linux
Start-C/H/S: 0/32/33
End-C/H/S: 513/80/62

To format the partition, I go:
mkfs.ext4 /dev/sdb1
Now, to mount this drive, I go:

sudo mount /dev/sdb1 /mnt/DRV1

To make this a permanent arrangement, I need to use the fstab file. The man page describes fstab as:

  The file fstab contains descriptive information about the filesystems
       the system can mount.  fstab is only read by programs, and not written;
       it is the duty of the system administrator to properly create and
       maintain this file.  The order of records in fstab is important because
       fsck(8), mount(8), and umount(8) sequentially iterate through fstab
       doing their thing.

       Each filesystem is described on a separate line.  Fields on each line
       are separated by tabs or spaces.  Lines starting with '#' are comments.
       Blank lines are ignored.

The fstab file lives in the /etc directory.

/etc/fstab contains the following fields separated by a space or tab:
<file system>   <dir>   <type>  <options>       <dump>  <pass>
  
file system, defines the storage device, dir defines the mount point, type defines the pertition type and options define define particular options for filesystems. 
Some options relate only to the filesystem itself. Some of the more common options are:
  • auto - file system will mount automatically at boot, or when the command 'mount -a' is issued.
  • noauto - the filesystem is mounted only when you tell it to.
  • exec - allow the execution binaries that are on that partition (default).
  • noexec - do not allow binaries to be executed on the filesystem.
  • ro - mount the filesystem read only.
  • rw - mount the filesystem read-write.
  • sync - I/O should be done synchronously.
  • async - I/O should be done asynchronously.
  • flush - specific option for FAT to flush data more often, thus making copy dialogs or progress bars to stays up until things are on the disk.
  • user - permit any user to mount the filesystem (implies noexec,nosuid,nodev unless overridden).
  • nouser - only allow root to mount the filesystem (default).
  • defaults - default mount settings (equivalent to rw,suid,dev,exec,auto,nouser,async).
  • suid - allow the operation of suid, and sgid bits. They are mostly used to allow users on a computer system to execute binary executables with temporarily elevated privileges in order to perform a specific task.
  • nosuid - block the operation of suid, and sgid bits.
  • noatime - do not update inode access times on the filesystem. Can help performance.
  • nodiratime - do not update directory inode access times on the filesystem. Can help performance. You do not need to enable this flag if you have already enabled noatime.
  • relatime - update inode access times relative to modify or change time. Access time is only updated if the previous access time was earlier than the current modify or change time (similar to noatime, but doesn't break mutt or other applications that need to know if a file has been read since the last time it was modified). Can help performance. 

    sudo vim /etc/fstab
Finally the last two columns dump and pass define if the drive is to be backed up, and whether or not to check the filesystem.

It is also possible to describe the partitions in terms of their UUID. This is what I do.  I can find the UUID of my external drive by running blkid.
➜ blkid
/dev/sda1: LABEL="System Reserved" UUID="ECC4AF03C4AECEE0" TYPE="ntfs" PARTUUID="078b320e-01"
/dev/sda2: UUID="AEDEBE20DEBDE12F" TYPE="ntfs" PARTUUID="078b320e-02"
/dev/sda3: UUID="d7331966-1731-4979-911e-314f77c7fffa" TYPE="swap" PARTUUID="078b320e-03"
/dev/sda4: UUID="d9ffe28d-e57a-488a-a944-13092fa60cfd" TYPE="ext4" PARTUUID="078b320e-04"
/dev/sdb1: UUID="0475ea17-a15b-4b11-91bc-8dea17399e1c" TYPE="ext4" PARTUUID="2ad7c98d-01"

I include a line in my fstab to include my external USB drive:

➜ cat /etc/fstab
UUID=d7331966-1731-4979-911e-314f77c7fffa none swap sw 0 0
UUID=d9ffe28d-e57a-488a-a944-13092fa60cfd / ext4 defaults 0 1
UUID=0475ea17-a15b-4b11-91bc-8dea17399e1c /mnt/DRV1 ext4 defaults 0 2
tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0