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