Ejemplos básicos de la gestión de almacenamiento en GNU/Linux. Revisión de herramientas y funcionamiento.
En estas prácticas se empleará el software de virtualización VIRTUALBOX para simular los equipos GNU/Linux sobre los que se realizarán las pruebas.
alumno@pc: $ sh ejercicio-ficheros.sh
Powershell.exe -executionpolicy bypass -file ejercicio-ficheros.ps1
Notas:
$DIR_BASE especifica donde se descargarán las imágenes y se crearán las MVs.
Por defecto en GNU/Linux será en $HOME/CDA1819 y en Windows en C:/CDA1819.
Puede modificarse antes de lanzar los scripts para hacer la instalación en otro directorio más conveniente (disco externo, etc)
.vdi.zip de http://ccia.esei.uvigo.es/docencia/CDA/1819/practicas/ y copiarlos en el directorio anterior ($DIR_BASE) para que el script haga el resto.
VBoxManage startvm <nombre MV>_<id>
Contiene un sistema Debian 9 con herramientas gráficas y un entorno gráfico ligero LXDE (Lighweight X11 Desktop Environment) [LXDE].
| login | password |
|---|---|
| root | purple |
| usuario | usuario |
root@datos:~# startx
Dispositivos -> Portapapeles compartido -> bidireccional de la ventana de la máquina virtual.
/dev/sda: disco principal, 10 GB (con la partición ext4 /dev/sda1 montada en /)
/dev/sdb: disco para swap, 1 GB (swap la en partición /dev/sdb1)
/dev/sdc: disco para ejercicios, 100 MB (inicialmente no particionado)
Dispositivos de bloque típicos en /dev
/dev/hd[X]: discos IDE (en desuso)
/dev/sd[X]: discos SCSI y SATA (el módulo contralor de pen drives 'usb-storage' emula SCSI)
/dev/fd[X]: discos flexibles
/dev/loop[X]: dispositivos loop
root@datos:~# ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 sep 12 17:31 /dev/sda brw-rw---- 1 root disk 8, 1 sep 12 17:31 /dev/sda1 brw-rw---- 1 root disk 8, 16 sep 12 17:31 /dev/sdb brw-rw---- 1 root disk 8, 17 sep 12 17:31 /dev/sdb1 brw-rw---- 1 root disk 8, 32 sep 12 17:31 /dev/sdc
Creación 'manual' de estos dispositivos en /dev/ con el comando mknod
udev
mknod /dev/<dispositivo> b <major> <minor>
b especifica que se creará un dispositivo de bloque
<major> indica el código del driver
<minor> especifica el dispositivo concreto (dispositivo en sí [tabla de particiones] ó partición dentro del dispositivo)
En dispositivos IDE: major es 3, minor en segmentos de 64 (0 para /dev/hda, 64 para /dev/hdb, 128 para /dev/hdc, ...)
En dispositivos SCSI o SATA: major es 8, minor en segmentos de 16 (0 para /dev/sda, 16 para /dev/sdb, 32 para /dev/sdc, ...)
/dev/sda tendrán minor 1 para /dev/sda1, 2 para /dev/sda2, etc
/dev/sdb tendrán minor 17 para /dev/sdb1, 18 para /dev/sdb2, etc
En dispositivos LOOP: major es 7, minor en secuencia desde 0 (0 para /dev/loop0, 1 para /dev/loop1,...)
dmesg: muestra el log del proceso de arranque, entre la información aportada informa de dispositivos de bloque detectados.
root@datos:~# dmesg | less
lshw -class disk: herramienta genérica que proporciona un listado del hardware del sistema
No suele formar parte de la instalación por defecto, instalado con apt-get install lshw (ya hecho en la MV de prácticas)
root@datos:~# lshw -class disk
*-disk
description: ATA Disk
product: VBOX HARDDISK
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/sda
version: 1.0
serial: VBb47bb7f6-e24cb0e7
size: 10GiB (10GB)
capabilities: partitioned partitioned:dos
configuration: ansiversion=5 logicalsectorsize=512 sectorsize=512 signature=58370392
*-disk
description: ATA Disk
product: VBOX HARDDISK
physical id: 0.0.0
bus info: scsi@1:0.0.0
logical name: /dev/sdb
version: 1.0
serial: VBf4d2dbc9-664a8fb5
size: 1GiB (1073MB)
capabilities: partitioned partitioned:dos
configuration: ansiversion=5 logicalsectorsize=512 sectorsize=512 signature=47772cb4
*-disk
description: ATA Disk
product: VBOX HARDDISK
physical id: 0.0.0
bus info: scsi@2:0.0.0
logical name: /dev/sdc
version: 1.0
serial: VB2d8e7931-bcad7997
size: 100MiB (104MB)
configuration: ansiversion=5 logicalsectorsize=512 sectorsize=512
lsblk: muestra información de los dispositivos de bloque
root@datos:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
|-sda1 8:1 0 10G 0 part /
sdb 8:16 0 1G 0 disk
|-sdb1 8:17 0 1022M 0 part [SWAP]
sdc 8:32 0 100M 0 disk
root@datos:~# lsblk --output-all | less
fdisk -l: listado de dispositivos de bloque, con información de sus particiones y de sus respectivos sistemas de ficheros
root@datos:~# fdisk -l Disco /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectores Unidades: sectores de 1 * 512 = 512 bytes Tamaño de sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes Tipo de etiqueta de disco: dos Identificador del disco: 0x58370392 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 20969471 20967424 10G 83 Linux Disco /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectores Unidades: sectores de 1 * 512 = 512 bytes Tamaño de sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes Tipo de etiqueta de disco: dos Identificador del disco: 0x47772cb4 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 2095103 2093056 1022M 82 Linux swap / Solaris Disco /dev/sdc: 100 MiB, 104857600 bytes, 204800 sectores Unidades: sectores de 1 * 512 = 512 bytes Tamaño de sector (lógico/físico): 512 bytes / 512 bytes Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
smartctl: información de diagnóstico del disco (si tiene soporte S.M.A.R.T.)
Parte de las S.M.A.R.T. tools, programas de utilidad (smartctl y smartd)
para controlar y monitorizar sistemas de almacenamiento usando el Self-Monitoring, Analysis and Reporting Technology System (S.M.A.R.T.) incluido la mayoría de los discos duros ATA y SCSI modernos.
No suele formar parte de la instalación por defecto, instalado con apt-get install smartmontools (ya hecho en la MV de prácticas)
root@alqueidon:~# smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/sdb -d scsi # /dev/sdb, SCSI device
root@alqueidon:~# smartctl -a /dev/sda
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.15.0-33-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Samsung based SSDs
Device Model: Samsung SSD 850 EVO 250GB
Serial Number: S3R0NF0JA00392F
LU WWN Device Id: 5 002538 d4251affc
Firmware Version: EMT03B6Q
User Capacity: 250.059.350.016 bytes [250 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
Device is: In smartctl database [for details use: -P show]
ATA Version is: ACS-2, ATA8-ACS T13/1699-D revision 4c
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Tue Sep 11 01:25:17 2018 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
General SMART Values:
Offline data collection status: (0x00) Offline data collection activity
was never started.
Auto Offline Data Collection: Disabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 0) seconds.
Offline data collection
capabilities: (0x53) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new command.
No Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 133) minutes.
SCT capabilities: (0x003d) SCT Status supported.
SCT Error Recovery Control supported.
SCT Feature Control supported.
SCT Data Table supported.
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 341
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 28
177 Wear_Leveling_Count 0x0013 099 099 000 Pre-fail Always - 1
179 Used_Rsvd_Blk_Cnt_Tot 0x0013 100 100 010 Pre-fail Always - 0
181 Program_Fail_Cnt_Total 0x0032 100 100 010 Old_age Always - 0
182 Erase_Fail_Count_Total 0x0032 100 100 010 Old_age Always - 0
183 Runtime_Bad_Block 0x0013 100 100 010 Pre-fail Always - 0
187 Uncorrectable_Error_Cnt 0x0032 100 100 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0032 057 053 000 Old_age Always - 43
195 ECC_Error_Rate 0x001a 200 200 000 Old_age Always - 0
199 CRC_Error_Count 0x003e 100 100 000 Old_age Always - 0
235 POR_Recovery_Count 0x0012 099 099 000 Old_age Always - 7
241 Total_LBAs_Written 0x0032 099 099 000 Old_age Always - 698131703
SMART Error Log Version: 1
No Errors Logged
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Vendor (0xc8) Completed without error 00% 14980 -
# 2 Reserved (0x30) Completed without error 00% 14980 -
# 3 Reserved (0x20) Completed without error 00% 12848 -
# 4 Reserved (0x10) Completed without error 00% 12848 -
# 5 Offline Completed without error 00% 12848 -
# 6 Reserved (0x20) Completed without error 00% 9767 -
# 7 Reserved (0x38) Completed without error 00% 572 -
hdparm: información y configuración de parámetros los discos
No suele formar parte de la instalación por defecto, instalado con apt-get install hdparm (ya hecho en la MV de prácticas)
root@alqueidon:~# hdparm -I /dev/sda (info. general del disco)
/dev/sda:
ATA device, with non-removable media
Model Number: Samsung SSD 850 EVO 250GB
Serial Number: S3R0NF0JA00392F
Firmware Revision: EMT03B6Q
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Used: unknown (minor revision code 0x0039)
Supported: 9 8 7 6 5
Likely used: 9
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 488397168
Logical Sector size: 512 bytes
Physical Sector size: 512 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1024*1024: 238475 MBytes
device size with M = 1000*1000: 250059 MBytes (250 GB)
cache/buffer size = unknown
Form Factor: 2.5 inch
Nominal Media Rotation Rate: Solid State Device
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 1 Current = 1
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
* Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
SET_MAX security extension
* 48-bit Address feature set
* Device Configuration Overlay feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{DMA|MULTIPLE}_FUA_EXT
* 64-bit World wide name
Write-Read-Verify feature set
* WRITE_UNCORRECTABLE_EXT command
* {READ,WRITE}_DMA_EXT_GPL commands
* Segmented DOWNLOAD_MICROCODE
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
* Gen3 signaling speed (6.0Gb/s)
* Native Command Queueing (NCQ)
* Phy event counters
* READ_LOG_DMA_EXT equivalent to READ_LOG_EXT
* DMA Setup Auto-Activate optimization
Device-initiated interface power management
* Asynchronous notification (eg. media change)
* Software settings preservation
Device Sleep (DEVSLP)
* SMART Command Transport (SCT) feature set
* SCT Write Same (AC2)
* SCT Error Recovery Control (AC3)
* SCT Features Control (AC4)
* SCT Data Tables (AC5)
* reserved 69[4]
* DOWNLOAD MICROCODE DMA command
* SET MAX SETPASSWORD/UNLOCK DMA commands
* WRITE BUFFER DMA command
* READ BUFFER DMA command
* Data Set Management TRIM supported (limit 8 blocks)
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
2min for SECURITY ERASE UNIT. 8min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5002538d4251affc
NAA : 5
IEEE OUI : 002538
Unique ID : d4251affc
Device Sleep:
DEVSLP Exit Timeout (DETO): 50 ms (drive)
Minimum DEVSLP Assertion Time (MDAT): 30 ms (drive)
Checksum: correct
root@alqueidon:~# hdparm -tT /dev/sda (tests de velocidad de lectura) /dev/sda: Timing cached reads: 9754 MB in 2.00 seconds = 4884.98 MB/sec Timing buffered disk reads: 1564 MB in 3.00 seconds = 520.96 MB/sec
/dev/
/dev/ (susceptibles de volver a ser ”agrupados”)
minor
Ejemplo (primer disco SATA)
/dev/sda con major = 8, minor = 0 (disco completo [tabla de particiones])
/dev/sda1 con major = 8, minor = 1 (primera partición ”primaria”)
/dev/sda2 con major = 8, minor = 2 (segunda partición ”primaria”)
/dev/sda3 con major = 8, minor = 3 (tercera partición ”primaria”)
dos su registro de arranque [MBR (master boot record)]
ubicado en el primer sector del disco admite hasta 4 particiones (sda1, sda2, sda3, sda4)
cat /proc/partitions
fdisk <dispositivo> (más info. man fdisk)
cfdisk <dispositivo> (más info. man cfdisk)
parted (más info. man cfdisk), interfaz gráfica gparted
Tarea: Particionar el disco /dev/sdc (inicialmente vacío), creando:
/dev/sdc1, /dev/sdc2)
/dev/sdc3)
/dev/sdc5, /dev/sdc6)
Para poder almacenar datos en los dispositivos (agrupados en ficheros), estos deben de contener un sistema de ficheros.
Existen diversos tipos de sistemas de ficheros con características y funcionalidades específicas.
El formateo de un dispositivo consiste en crear las estructuras de datos (metadatos) del correspondiente sistema de ficheros, necesarias para el posterior almacenamiento y gestión de los ficheros que lo conforman.
Comandos
mkfs.<tipo> <dispositivo>
mkfs -t <tipo> <dispositivo>
El tipo de sistema de ficheros debe de estar soportado por el kernel de la máquina (módulos compilados y cargados, normalmente ya está hecho por defecto [ver ls -l /lib/modules/3.16.0-4-586/kernel/fs]) y haberse instalado las correspondientes utilidades de línea de comandos (paquete xfsprogs para XFS, reiserfsprogs para ReiserFS, etc) en las que se incluyen los comandos mkfs.<tipo> y mount.<tipo> responsables del formateo y el montaje de cada tipo de sistema de ficheros.
En el caso de GNU/Linux los sistemas de ficheros nativos son la familia ext2 y sus sucesores (ext3 y ext4). También suele
incluirse por defecto el soporte a loa sistemas de fichero de MS Windows fat, vfat y ntfs, por cuestiones de compatibilidad.
Tarea: Formatear las particiones del disco /dev/sdc
/dev/sdc1 de tipo ext3 (con mkfs.ext3)
/dev/sdc2 de tipo ext4 (con mkfs.ext4)
/dev/sdc5 de tipo ntfs (con mkfs.ntfs)
/dev/sdc6 de tipo xfs (con mkfs.xfs)
Se puede comprobar el resultado con el comando parted -l /dev/sdc
Se pueden recuperar los metadatos de un sistema de ficheros ext2 (y sus sucesores ext3 y ext4) con el comando dumpe2fs.
root@alqueidon:~# dumpe2fs /dev/sda1 dumpe2fs 1.44.1 (24-Mar-2018) Filesystem volume name: <none> Last mounted on: / Filesystem UUID: 963e2dd4-20bb-4a71-a38b-fbaa0614c0ee Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery ... Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 14409728 Block count: 57631232 Reserved block count: 2881561 Free blocks: 44874328 Free inodes: 13703461 First block: 0 Block size: 4096 Fragment size: 4096 ... Filesystem created: Tue Aug 21 22:20:01 2018 Last mount time: Mon Sep 10 21:13:10 2018 Last write time: Mon Sep 10 21:13:09 2018 Mount count: 22 ... root@alqueidon:~# dumpe2fs -h /dev/sda1 | grep -i 'mount count' (busca num. de montajes realizados) dumpe2fs 1.44.1 (24-Mar-2018) Mount count: 22 Maximum mount count: -1
Comandos
mount -t <tipo> <dispositivo> <punto montaje>
mount.<tipo> <dispositivo> <punto montaje>
Tarea: Crear los puntos de montaje en /mnt/ y montar las particiones de /deb/sdc
/dev/sdc1 en /mnt/uno
/dev/sdc2 en /mnt/dos
/dev/sdc5 en /mnt/tres
/dev/sdc6 en /mnt/cuatro
Comprobad el resultado con el comando mount o con df -hiT
Nota:
umount.
/etc/fstab (ver man fstab)
ext2, ext3 y ext4 es posible configurar determinados aspectos de los mismos (frecuencia y/o de num. de montajes antes de escaneo, comportamiento ante errores, etc) con el comando tune2fs (ver man tune2fs)
En la MV de prácticas está disponible la utilidad ext3grep (instalada con apt-get install ext3grep).
ext3
y ext4, también ofrece funcionalidades que permiten inspeccionar las estructuras de datos usadas por estos sistemas.
ext3grep --dump-names /dev/sdc1 (nombres de ficheros)
ext3grep --inode 2 /dev/sdc1 (datos del inode 2 [raíz del sistema de ficheros])
ext3grep --superblock /dev/sdc1 (datos del superbloque)
dd])
es la posibilidad de hace uso de los pseudo-dispositivos de bloque loop.
Ejemplo:
root@datos:~# dd if=/dev/zero of=/tmp/ceros.raw bs=5M count=1
/deb/loop0 (ver man losetup)
root@datos:~# losetup /dev/loop0 /tmp/ceros.raw
lsblk que se identifica como dispositivo de bloques
root@datos:~# lsblk
ext3
root@datos:~# mkfs.ext /dev/loop0
/dev/loop0
root@datos:~# mkdir /mnt/loop root@datos:~# mount -t ext3 /dev/loop0 /mnt/loop