Kommandoer
Harddiske og partitioner

Grundbegreber

Harddiske

I daglig tale er harddisken den lille metalkasse der indeholder en til flere skiver, hvorpå der kan gemmes data. I computerteknologisk sammenhæng kan det dog også være andet. En harddisk er en enhed der holder på data også selvom der ikke er strøm og derudover skal den indeholde en partitionstabel. Det betyder at følgende enheder vil blive opfattet som harddiske af Linux:

Betegnelse Forklaring Montering
HDD Hard Disk Drive Internt
SSD Solid State Drive Intern
HHD Hybrid Hard Drive Intern
mSATA mini Serial AT Attachment Intern
eSATA external Serial AT Attachment Ekstern
USB Universal Serial Bus Ekstern

Linux kan starte fra alle partitioner, da selve bootprocessen styres af en bootmanager. Derfor kan Linux startes op både fra CD/DVD skriver og USB-drev.

Betegnelser

Linuxsystemet administrerer sine diske ved hjælp af den fysiske placering på bundkortet. En computer med 2 harddiske og 1 DVD-drev kan give følgende:

Fysiske placering Enhed Filplacering
SATA 1 Harddisk 100GB /dev/sda
SATA 2 Harddisk 100GB /dev/sdb
SATA 3 DVD-drev /dev/sr0

Betegnelsen sd står altså for, at det er en harddisk. Bogstaverne bagefter står for hvilken harddisk det er. Ubuntu opretter selv det antal filer/harddiske der er nødvendige, så det passer med antallet af harddiske.

Når Linux starter op registrerer det alle fysisk tilsluttede enheder og giver dem en plads i filsystemet f.eks: /dev/sda. Ubuntu indlæser altså indholdet fra den første harddisk i filen /dev/sda.

En CD/DVD/BD-læser bliver tilgængelig igennem filen /dev/sr0.

Partitioner

Selve den fysiske harddisk skal gøres tilgængelig for et filsystem. Det gøres ved hjælp af partitioner (inddelinger), som formateres med et filsystem. Her findes der to typer: primære- og logiske partitioner. De logiske partitioner ligger på en udvidet primær partition.

Af historiske grunde kan der maksimalt være 4 primære partitioner på en harddisk. Der er dog mulighed for at oprette op til 15 partitioner på hver harddisk med Ubuntu. Opretter man logiske diske, kan der dog være maksimalt 3 primære partitioner.

partition type
sda1 Primær
sda2
sda3
sda4
sda5 Primær
sda6
...
sda14
sda15

Filsystemer

På Ubuntu anvendes filsystemet EXT4 som standard.

EXT4

  • Max. størrelse: 1 EiB
  • Max. filstørrelse: 16 TiB
  • Max. fillængde: 255 bytes
  • Max. Antal filer: 4 mia
  • Introduceret: 2008

Læs mere: https://en.wikipedia.org/wiki/Ext4

XFS

Dette filsystem er blevet standard på RHEL (Red Hat Enterprice Linux) og NASA Advanced Supercomputing Division

  • Max. størrelse: 16 EiB
  • Max. filstørrelse: 16 EiB
  • Max. fillængde: 255 bytes
  • Max. Antal filer: \( 2^{64} \)
  • Introduceret: 1994

Læs mere: https://en.wikipedia.org/wiki/xfs

BTRFS

BTRFS er et såkald COW- system (Copy-On-Write). I praksis betyder det, at det har indbygget en "snapshot" mulighed, så man kan vende tilbage til en tidligere tilstand. Det har også mange andre system tekniske avancerede muligheder.

Filsystemet anvendes som standard af SUSE LES (SUSE Linux Enterprise Server)

  • Max. størrelse: 16 EiB
  • Max. filstørrelse: 16 EiB
  • Max. fillængde: 255 ASCII karakterer
  • Max. Antal filer: \( 2^{64} \)
  • Introduceret: 2009

Læs mere: https://en.wikipedia.org/wiki/Btrfs

Du kan se størrelserne herinder. Alle tre filsystemer understøtter

Decimal Binær
Værdi Betegnelse Værdi Betegnelse
\( 1000 \) kB kilobyte \( 1024 \) kB kibibyte
\( 1000^2 \) MB megabyte \( 1024^2 \) Mib mebibyte
\( 1000^3 \) GB gigabyte \( 1024^3 \) GiB gibibyte
\( 1000^4 \) TB terrabyte \( 1024^4 \) TiB tebibyte
\( 1000^5 \) PB petabyte \( 1024^5 \) PiB pebibyte
\( 1000^6 \) EB exabyte \( 1024^6 \) EiB exbibyte
\( 1000^7 \) ZB zettabyte \( 1024^7 \) TiB zebibyte
\( 1000^8 \) YB yottabyte \( 1024^8 \) YiB Yobibyte

Overblik

Vi kan se hvordan et systems harddiske er sat op ved hjælp af lsblk. Her er det en Ubuntu standard installation med automatisk harddiskopsætning.

tj@tj-VirtualBox:~$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom  
sda      8:0    0  100G  0 disk 
├─sda2   8:2    0    1K  0 part 
├─sda5   8:5    0    8G  0 part [SWAP]
└─sda1   8:1    0   92G  0 part /

lsblk kan give langt flere informationer ved at angive nogle options. Kommandoen skal køres som superuser, da nogle af informationerne kræver root-rettigheder

sudo lsblk -o name,type,fstype,size,ro,type,mountpoint
tj@tj-VirtualBox:~$ sudo lsblk -o name,type,fstype,size,ro,type,mountpoint
[sudo] adgangskode for tj: 
NAME   TYPE FSTYPE  SIZE RO TYPE MOUNTPOINT
sr0    rom         1024M  0 rom  
sda    disk         100G  0 disk 
├─sda2 part           1K  0 part 
├─sda5 part swap      8G  0 part [SWAP]
└─sda1 part ext4     92G  0 part /

Hvis vi kigger på harddisk sda, kan vi se at den er delt ind i 3 partitioner, der hver har sit monteringspunkt, hvorimod sdb hverken er partitioneret eller monteret.

Find dine harddiske

Fremgangsmåden til at konfigurere en harddisk er, at den skal:

  1. Identificeres,
  2. Partitioneres,
  3. Formateres og
  4. Monteres

lsblk viser hvad operativsystemet kan se. Hvis vi ønsker at kigge på selve harddisken skal vi anvende programmet fdisk. Dette program konfigurerer selve harddisken og hvordan den er inddelt. Af samme årsag skal fdisk altid køres som root. Vi kan heller ikke se med hvilket filsystem drevet er formateret, kun hvilken type det er forberedt til.

sudo fdisk -l

Jeg har i nedestående kode markeret hvor informationerne om henholdsvis sda og sdb starter. Læg mærke til at fdisk ikke har registreret DVD-drevet, da det ikke er et fast drev.

tj@tj-VirtualBox:~$ sudo fdisk -l
... 

Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf5fc72dc

Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf5fc72dc

Enhed      Opstart     Start      Slut  Sektorer Size Id Type
/dev/sda1  *            2048 192939547 192937500  92G 83 Linux
/dev/sda2          192942078 209713151  16771074   8G  5 Udvidet
/dev/sda5          192942080 209713151  16771072   8G 82 Linux swap / Solaris

sda blliver gjort tilgængelig for Linux ved hjælp af filen /etc/fstab. Vi kan kigge på filen ved hjælp af nano. Gem kun ændringer hvis du er helt sikker på hvad du gør, da Linux måske ikke kan montere harddiskene ved genstart.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>  <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=34bb7b7d-54b7-43c0-bba7-0bf0565c563d /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=9b832ca1-217e-4308-bdf3-225b789946c9 none            swap    sw              0       0

Partitionering af harddisken

Harddiske partitioneres af programmet fdisk, så længe de er under 2 TB. Er det over 2 TB anvendes programmet gdisk, som ikke bliver gennemgået her. Start partitioneringsprogrammet op med med:

VIGTIGT: Hvis du på noget tidspunkt bliver i tvivl om at du har gjort noget forkert, så kan du hoppe ud af programmet ved at bruge q eller Ctrl+c! Programmet skriver først til disken når du vælger det.

sudo fdisk /dev/sdb
tj@tj-VirtualBox:~$ sudo fdisk /dev/sdb
[sudo] password for tj: 
Enheden indeholder hverken en gyldig DOS-partitionstabel eller en Sun-, SGI- eller OSF-disketiket.
Opretter en ny DOS-disketiket med diskidentifikation 0xfad2f3ee.
Ændringer vil holdes i hukommelsen, indtil du bestemmer dig for at
gemme dem. Derefter kan det tidligere indhold naturligvis ikke genskabes.

Advarsel: Ugyldigt flag 0x0000 for partitionstabel 4 vil blive rettet med »w« (forkortelse for write; dansk=skriv)

Kommando (m for hjælp): 

Det første fdisk gør, er at gøre opmærksom på at disken ikke har nogen partitionstabel. Det er det første der skal oprettes. Tast m og så Enter:

Kommando (m for hjælp): m+Enter
Kommandobeskrivelse
   a   skift et opstartsflag (bootable)
   b   skift bsd-disketiket
   c   skift DOS-kompatilitetsflaget
   d   slet en partition
   l   vis liste over kendte partitionstyper
   m   vis denne menu
   n   tilføj en ny partition
   o   opret en ny, tom DOS-partitionstabel
   p   vis partitionstabellen
   q   afslut uden at gemme ændringerne
   s   opret en ny, tom Sun-disketiket
   t   skift system-id for en partition
   u   skift enheder for visning/indtastning
   v   verificer partitionstabellen
   w   skriv partitionstabel til disk og afslut
   x   ekstra funktionalitet (kun for eksperter)

Kommando (m for hjælp): 

Først skal der oprettes en ny partitionstabel. Tryk o

Kommando (m for hjælp): o+Enter
Opretter en ny DOS-disketiket med diskidentifikation 0xa6162a16.
Ændringer vil holdes i hukommelsen, indtil du bestemmer dig for at
gemme dem. Derefter kan det tidligere indhold naturligvis ikke genskabes.

Advarsel: Ugyldigt flag 0x0000 for partitionstabel 4 vil blive rettet med »w« (forkortelse for write; dansk=skriv)

Kommando (m for hjælp):

Herefter skal der oprettes en ny partition. Det er en proces med flere tastetryk, som jeg viser samlet herunder. Det du skal taste er:

  1. [n] - opret ny partition
  2. [p] - den skal være primær
  3. [Enter] - vælg første partition (standard)
  4. [Enter] - vælg første sektor (standard)
  5. [Enter] - vælg sidste sektor (standard)

Kommando (m for hjælp): n+Enter
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p+Enter
Partitionsnummer (1-4, standard 1): Enter
Bruger standardværdi 1
Første sektor (2048-209715199, standard 2048): Enter
Bruger standardværdi 2048
Seneste sektor, +sektorer eller +størrelse{K,M,G} (2048-209715199, standard 209715199): Enter
Bruger standardværdi 209715199

Kommando (m for hjælp): 

Få en oversigt over det du har gjort: tast p

Kommando (m for hjælp): p+Enter

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 hoveder, 63 sektorer/spor, 13054 cylindre, i alt 209715200 sektorer
Enheder = sektorer af 1 * 512 = 512 byte
Sektorstørrelse (logisk/fysisk): 512 byte / 512 byte
I/O-størrelse (minimum/optimal): 512 byte / 512 byte
Diskidentifikation: 0xa6162a16

    Enhed Opstart   Start         Slut     Blokke   Id  System
/dev/sdb1            2048   209715199   104856576   83  Linux

Kommando (m for hjælp): 

Vær opmærksom på Id og System. Det angiver hvilke typer af filsystemer partitionen kan formateres til. Her er det korrekt at det skal være 83 og Linux.

Skriv ændringerne til disken. Tast w

Kommando (m for hjælp): w+Enter
Partitionstabellen er ændret!

Kalder ioctl() for at genindlæse partitionstabellen.
Synkroniserer diske.
tj@tj-VirtualBox:~$ 

Før vi går videre tjekker vi om disken er partitioneret korrekt med: fdisk -l /dev/sdb

tj@tj-VirtualBox:~$ sudo fdisk -l /dev/sdb

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
43 hoveder, 44 sektorer/spor, 110843 cylindre, i alt 209715200 sektorer
Enheder = sektorer af 1 * 512 = 512 byte
Sektorstørrelse (logisk/fysisk): 512 byte / 512 byte
I/O-størrelse (minimum/optimal): 512 byte / 512 byte
Diskidentifikation: 0xa6162a16

    Enhed Opstart   Start         Slut     Blokke   Id  System
/dev/sdb1            2048   209715199   104856576   83  Linux

Formater harddisken

Harddisken skal fomateres til ext4. Det gøres med kommandoen:

sudo mkfs -t ext4 /dev/sdb1
tj@tj-VirtualBox:~$ sudo mkfs -t ext4 /dev/sdb1
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214144 blocks
1310707 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

tj@tj-VirtualBox:~$

Vi tjekker om harddisken er formateret korrekt med lsblk (min markering).

tj@tj-VirtualBox:~$ sudo lsblk -o name,type,fstype,size,ro,type,mountpoint
NAME   TYPE FSTYPE   SIZE RO TYPE MOUNTPOINT
sda    disk          100G  0 disk 
├─sda1 part ext4    46,6G  0 part /
├─sda2 part swap     3,8G  0 part [SWAP]
└─sda3 part ext4    28,9G  0 part /data
sdb    disk          100G  0 disk 
└─sdb1 part ext4     100G  0 part 
sr0    rom          1024M  0 rom

Fast montering i filsystemet

Arbejdsgangen når man monterer en disk er følgende:

  1. Oprette en mappe til at montere drevet i.
  2. Find diskens UUID (Universally Unique IDentifier)
  3. Monteres på filsystemet (Montering)
  4. Konfigureres (Rettigheder)

Her vil vi montere drevet i mappen /backup. Opret mappen:

sudo mkdir /backup

Find diskens UUID

sudo blkid /dev/sdb1
tj@tj-VirtualBox:~$ sudo blkid /dev/sdb1
/dev/sdb1: UUID="6731e565-b3d7-4d81-86c7-74b6e3e1d591" TYPE="ext4" 

Det lange UUID nummer (6731e565-b3d7-4d81-86c7-74b6e3e1d591) er et tilfældigt nummer som Ubuntu har skabt og består af en 128bits kode. Det er en sikkerhedsfaktor der gør, at man ikke bare kan skifte en disk ud, uden at Ubuntu opdager det. Du skal selvfølgelig anvende den UUID dit system angiver. Åben filen /etc/fstab med nano og indsæt det med rødt (med din UUID):

sudo nano /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
# / was on /dev/sda1 during installation
UUID=c2c76ea3-8bee-4930-be2c-20d11a7358c1 /               ext4    errors=remount-ro 0       1
# /data was on /dev/sda3 during installation
UUID=a2d7f466-6131-4048-86b1-b0304e9bd905 /data           ext4    defaults        0       2
# swap was on /dev/sda2 during installation
UUID=1c538622-36c6-4fcb-a127-636a82ad84e3 none            swap    sw              0       0

#Tilføjet /dev/sdb1 som /backup
UUID=6731e565-b3d7-4d81-86c7-74b6e3e1d591 /backup ext4 defaults 0 2

Når computeren starter bliver alle diske der er konfigureret i /etc/fstab monteret. For at få adgang til drevet med det samme køres kommandoen:

sudo mount -a

Tjek at drevet er monteret med lsblk.

tj@tj-VirtualBox:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   100G  0 disk 
├─sda1   8:1    0  46,6G  0 part /
├─sda2   8:2    0   3,8G  0 part [SWAP]
└─sda3   8:3    0  28,9G  0 part /data
sdb      8:16   0   100G  0 disk 
└─sdb1   8:17   0   100G  0 part /backup
sr0     11:0    1  1024M  0 rom 

Ændre ejerskabet og rettighederne så kun du har adgang til drevet

sudo chown -R tj:tj /media/backup sudo chmod -R 700 /media/backup/

Denne metode kan anvendes både til alle former for harddiske og netværksdrev.

https://help.ubuntu.com/community/InstallingANewHardDrive

Midlertidig montering

Som vi har gennemgået ovenfor, så er der to mapper i filstrukturen til at montere ikke faste drev i. Det er henholdsvis /mnt og /media. Vi vil i denne sammenhæng vælge /media da det handler om en harddisk.

Vi vil herunder gennemgå en midlertidig montering, som hvis det havde været et eSATA/USB-drev, og en fast montering i filstrukturen.

Ofte har man brug for at montere et drev midlertidigt, f.eks. et USB-drev.

Arbejdsgangen når man monterer en disk er følgende:

  1. Oprette en mappe til at montere drevet i.
  2. Monteres på filsystemet (Montering)
  3. Konfigureres (Rettigheder)

Opret mappe til at montere drevet i. Her vælger vi /media/backup.

sudo mkdir /media/backup

Drevet monteres:

sudo mount /dev/sdb1 /media/backup

Kontroller at harddisken er monteret med lsblk.

tj@tj-VirtualBox:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   100G  0 disk 
├─sda1   8:1    0  46,6G  0 part /
├─sda2   8:2    0   3,8G  0 part [SWAP]
└─sda3   8:3    0  28,9G  0 part /data
sdb      8:16   0   100G  0 disk 
└─sdb1   8:17   0   100G  0 part /media/backup
sr0     11:0    1  1024M  0 rom  

Kontroller rettighederne

tj@tj-VirtualBox:~$ sudo ls -al /media | grep backup
drwxr-xr-x   3 root root 4096 mar 16 15:00 backup

Ændre ejerskabet og rettighederne så kun du har adgang til drevet

sudo chown -R tj:tj /media/backup sudo chmod -R 700 /media/backup/

Kontroller rettighederne igen

tj@tj-VirtualBox:~$ sudo ls -al /media | grep backup
drwx------   3 tj tj 4096 mar 16 15:00 backup

Afmonter herefter drevet igen, for at vi kan montere det fast ved hjælp af /etc/fstab.

umount /dev/sdb1

USB-boot disk

Ofte har man brug for at lave en nøjagtig kopi af en partition, f.eks. når man skal brænde en ISO fil over på en USB disk. Dette gøres med programmet dd. Der findes også GUI programmer til det, men min erfaring er, at de nogle gange roder med partitionstabellen, så USB disken reelt bliver ubrugelig. dd virker altid!

dd if=*input fil* of=*destinations fil* *Optioner* sync

VIGTIGT: Det er vigtigt at køre sync efter man har kopieret data, da man risikerer at ikke al data er skrevet. Det skyldes at mange filskrivningsoperationerer cached, så operativsystemet kan vente med at skrive til det har tid.

Herunder er vist hele proceduren med at oprette en USB bootdisk fra en ISO. Vær opmærksom på at USB disken først have sin partitionstabel renset, hvis den har været anvendt til at brænde ISO filer før. Dette skyldes at den skrivbare del er "begrænset" til ISO-filens størrelse.

  1. Kør isohybrid på isofilen
  2. isohybrid *isofil*
  3. Sæt USB-nøglen i, og vent til systemet har initialiseret den (ca. 5 sekunder)
  4. Afmonter USB nøglen
  5. umount *sti_til_USB*
  6. Fjern eksisterende partitioner med fdisk og opret en ny. Lad den nye partition fylde hele USB-disken.
  7. kør dd
  8. sudo dd if=*sti_til_filen* of=*sti_til_USB*
  9. Vent til Terminalen
  10.    VIGTIGT    Kør sync, for at sikr dig at alle data er skrevet til USB disken

På systemet vi her går ud fra er der i forvejen to harddiske, hvilket betyder at en USB-disk vil blive registreret som den efterfølgende, altså /dev/sdc.

I eksemplet herunder oprettes en USB-bootdisk med systemrescueCD. En distribution jeg varmt kan anbefale til systemarbejde. ISO filen er blevet hentet på nettet (https://www.system-rescue-cd.org/Download) og placeret her /data/systemrescuecd-x86-4.7.1.iso.

Find ISO-filens placering og navn.

tj@tj-VirtualBox:~$ ls -al /data | grep *.iso
-rw-rw-r--  1 tj tj 481296384 feb 25 11:40 systemrescuecd-x86-4.7.1.iso
tj@tj-VirtualBox:~$ sudo isohybrid /data/systemrescuecd-x86-4.7.1.iso 

USB-disken sættes i (vent 5 sekunder), afmonter disken og tjek at den er afmonteret

tj@tj-VirtualBox:~$ lsblk | grep sdc
sdc      8:16   1   3,8G  0 disk 
└─sdc1   8:17   1   3,8G  0 part /media/tj/663A-63FE
tj@tj-VirtualBox:~$ sudo umount /dev/sdb1
tj@tj-VirtualBox:~$ sudo lsblk | grep sdb
sdc      8:16   1   3,8G  0 disk 
└─sdc1   8:17   1   3,8G  0 part

Kopier ISO filen over på USB-nøglen (Det tager et par minutter alt efter størrelsen på isofilen) og kør sync

tj@tj-VirtualBox:~$ sudo dd if=/data/systemrescuecd-x86-4.7.1.iso of=/dev/sdb
[sudo] password for tj: 
940032+0 blokke ind
940032+0 blokke ud
481296384 byte (481 MB) kopieret, 130,186 s, 3,7 MB/s
tj@tj-VirtualBox:~$ sync
tj@tj-VirtualBox:~$

Herefter kan USB-drevet fjernes og anvendes til at boote med.

Læs også: https://www.system-rescue-cd.org/Sysresccd-manual-en_How_to_install_SystemRescueCd_on_an_USB-stick

Læs også: https://wiki.archlinux.org/index.php/disk_cloning

man-page dd: http://manpages.ubuntu.com/manpages/trusty/man1/dd.1.html