Tecnología de discos
En los primeros días de Unix y posteriormente de Linux, los discos eran físicamente grandes, pero muy pequeños en términos de capacidad de almacenamiento. Un disco de 300 megabytes a mediados de los 90 era del tamaño de una caja de zapatos. Hoy en día, se pueden conseguir discos de varios terabytes que tienen el tamaño de una rebanada de pan tostado.
Tradicionalmente, los archivos residían dentro de sistemas de archivos que residían en particiones de disco que a su vez eran simplemente rebanadas de discos. Esta organización sigue dominando hoy en día, aunque los servidores de los grandes centros de datos a menudo adoptan una estructura totalmente diferente.
/\ / \ / \ / file \ / \ /==========\ / \ / file system \ / \ /==================\ / disk partition \ /======================\ / disk \ /==========================\
Esta visión simplista todavía funciona para muchos sistemas, pero hoy en día hay un montón de complejidades que hacen que la gestión del disco sea más difícil en algunos aspectos y más fácil en otros. Un sistema de archivos podría ser virtual: ya no reside en un solo disco y es más complejo de gestionar, pero es mucho más fácil de redimensionar según sea necesario. De hecho, todo el sistema podría ser virtual. Y lo que podríamos gestionar como si fuera un solo disco podría ser en realidad alguna porción de una matriz de discos muy grande.
Gestión de discos
Los administradores de sistemas generalmente tienen que lidiar con muchos problemas cuando se trata de gestionar discos. Estos incluyen:
- Particionar discos
- Crear sistemas de archivos
- Montar sistemas de archivos
- Compartir sistemas de archivos
- Supervisar el espacio libre dentro de los sistemas de archivos
- Hacer copias de seguridad (y a veces restaurar) los sistemas de archivos
- Proteger algunos sistemas de archivos de quedarse sin espacio (e.g., puede querer que la partición del sistema operativo esté separada de los directorios personales o de las aplicaciones para evitar que se vea afectada si los archivos de los usuarios comienzan a ocupar una cantidad excesiva de espacio en el disco)
- mejorar el rendimiento
- asignar espacio de intercambio
- facilitar el mantenimiento y las copias de seguridad (por ejemplo, podría desmontar /apps si no forma parte de / y podría querer hacer copias de seguridad de /home con más frecuencia que de /usr)
- fsck más eficiente (y dirigido)
- mantener (especialmente en sistemas de prueba) múltiples sistemas operativos
- reservar suficiente espacio en disco para la expansión del sistema de archivos
- compartir sistemas de archivos seleccionados con otros sistemas
Las razones para particionar un disco incluyen:
Comandos de particionamiento
Para la mayoría de los servidores Linux, el particionamiento se realiza antes de desplegar los servidores. Por otro lado, es posible que se añadan discos en algún momento posterior o que se retenga alguna cantidad importante de espacio libre en disco para su uso futuro.
Para realizar cambios o verificar las particiones, introduzca un comando como fdisk /dev/sda para iniciar fdisk de forma interactiva y, a continuación, escriba m para ver una lista de las cosas que puede hacer con el comando fdisk.
$ sudo fdisk /dev/sdaCommand (m for help): mCommand action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
Como puede ver, el comando fdisk proporciona mucha funcionalidad. Las particiones que configure pueden parecerse a esta configuración en la que se han configurado cuatro particiones en un solo disco – /dev/sda.
sda+------------+------------------------+--------------------+------+| / 40G | /home 80G | /apps 70G | swap |+------------+------------------------+--------------------+------+ sda1 sda2 sda3 sda4
Examinando el espacio del disco y las particiones del disco
Hay una serie de excelentes comandos para examinar las particiones del disco. El comando df es uno de los más utilizados para informar sobre el uso del espacio en disco. Con la opción -h, el comando df muestra las mediciones en el formato más «amigable» y eso es, de hecho, lo que la «h» pretende implicar. Como puedes ver en el ejemplo de abajo, las mediciones se muestran en kilobytes, megabytes o gigabytes dependiendo de los tamaños en lugar de usar todos la misma escala.
$ df -hFilesystem Size Used Avail Use% Mounted onudev 969M 4.0K 969M 1% /devtmpfs 196M 1.1M 195M 1% /run/dev/sda1 37G 4.5G 31G 13% /none 4.0K 0 4.0K 0% /sys/fs/cgroupnone 5.0M 0 5.0M 0% /run/locknone 980M 152K 979M 1% /run/shmnone 100M 36K 100M 1% /run/user/dev/sda3 28G 44M 26G 1% /apps
El comando pydf (piensa en «python df» ya que en realidad es un script de python) también proporciona una visualización muy útil del uso del disco mostrando los puntos de montaje y pequeñas y bonitas ilustraciones de lo llena que está cada partición.
$ pydfFilesystem Size Used Avail Use% Mounted on/dev/sda1 37G 4534M 30G 12.1 //dev/sda3 27G 44M 26G 0.2 /apps
El comando parted muestra la información de las particiones en un formato diferente:
$ sudo parted -lModel: ATA WDC WD800AAJS-60 (scsi)Disk /dev/sda: 80.0GBSector size (logical/physical): 512B/512BPartition Table: msdosNumber Start End Size Type File system Flags 1 1049kB 40.0GB 40.0GB primary ext4 boot 2 40.0GB 50.0GB 10.0GB primary linux-swap(v1) 3 50.0GB 80.0GB 30.0GB primary ext4
El comando lsblk (list block devices) ilustra la relación entre los discos y sus particiones de forma gráfica y también proporciona los números de dispositivo mayor y menor y los puntos de montaje.
$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 74.5G 0 disk├─sda1 8:1 0 37.3G 0 part /├─sda2 8:2 0 9.3G 0 part └─sda3 8:3 0 28G 0 part /apps
El comando fdisk informa de más detalles sobre las particiones del disco y utiliza números muy diferentes. También puede utilizar fdisk para crear o eliminar particiones, listar el espacio no particionado, cambiar un tipo de partición o verificar la tabla de particiones.
$ sudo fdisk -lDisk /dev/sda: 80.0 GB, 80026361856 bytes255 heads, 63 sectors/track, 9729 cylinders, total 156301488 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000f114b Device Boot Start End Blocks Id System/dev/sda1 * 2048 78125055 39061504 83 Linux/dev/sda2 78125056 97656831 9765888 82 Linux swap / Solaris/dev/sda3 97656832 156301311 29322240 83 Linux
El comando sfdisk es similar a fdisk, pero facilita algunas actividades de manipulación de particiones.
$ sudo sfdisk -l -uMDisk /dev/sda: 9729 cylinders, 255 heads, 63 sectors/trackUnits = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0 Device Boot Start End MiB #blocks Id System/dev/sda1 * 1 38146 38146 39061504 83 Linux/dev/sda2 38147 47683 9537 9765888 82 Linux swap / Solaris/dev/sda3 47684 76318 28635 29322240 83 Linux/dev/sda4 0 - 0 0 0 Empty
NOTA: Un mebibyte (MiB) = 220 bytes o 1,048,576 bytes.
El comando cfdisk también se puede utilizar para mostrar o manipular las particiones del disco.
$ sudo cfdisk cfdisk (util-linux 2.20.1) Disk Drive: /dev/sda Size: 80026361856 bytes, 80.0 GB Heads: 255 Sectors per Track: 63 Cylinders: 9729 Name Flags Part Type FS Type Size (MB) -------------------------------------------------------------------------- Pri/Log Free Space 1.05* sda1 Boot Primary ext4 39998.99* sda2 Primary swap 10000.27* sda3 Primary ext4 30025.98* Pri/Log Free Space 0.10* Create new partition from free space
Monitoreo del rendimiento del disco
El comando iostat puede mostrar estadísticas que ilustran el rendimiento de los discos, incluyendo la intensidad de su uso. También muestra mediciones importantes que muestran cuán ocupada está la CPU y cuántos de sus recursos se utilizan para los tipos de trabajo. El sistema descrito a continuación está inactivo más del 95% del tiempo. Más importante para nuestro enfoque en los discos, el %iowait (CPU esperando en IO de disco) es muy bajo. Esto no sería cierto si el disco estuviera inusualmente ocupado y el IO del disco fuera un cuello de botella.
$ iostat -x 60Linux 3.13.0-129-generic (stinkbug) 08/31/2017 _x86_64_ (2 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 0.93 1.15 0.35 1.86 0.00 95.73Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %utilsda 8.37 3.26 13.41 2.79 341.14 191.82 65.79 0.61 37.60 30.40 72.14 2.52 4.08
Probablemente uno de los comandos más informativos para ver la salud del disco es smartctl (parte de smartmontools). Aunque el comando genera una gran cantidad de salida, proporciona valiosas mediciones que podrían ayudarle a localizar los problemas del disco, sobre todo una vez que se acostumbre a trabajar con su extensa salida.
$ sudo smartctl -a /dev/sda1smartctl 6.2 2013-07-26 r3841 (local build)Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org=== START OF INFORMATION SECTION ===Model Family: Western Digital Caviar Blue Serial ATADevice Model: WDC WD800AAJS-60M0A0Serial Number: WD-WMAV37134378LU WWN Device Id: 5 0014ee 0015c85efFirmware Version: 02.03E02User Capacity: 80,026,361,856 bytes Sector Size: 512 bytes logical/physicalDevice is: In smartctl database ATA Version is: ATA8-ACS (minor revision not indicated)SATA Version is: SATA 2.5, 3.0 Gb/sLocal Time is: Thu Aug 31 15:30:19 2017 EDTSMART support is: Available - device has SMART capability.SMART support is: Enabled=== START OF READ SMART DATA SECTION ===SMART overall-health self-assessment test result: PASSEDGeneral SMART Values:Offline data collection status: (0x82) Offline data collection activity was completed without error. Auto Offline Data Collection: Enabled.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 Offlinedata collection: ( 2700) seconds.Offline data collectioncapabilities: (0x5b) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. 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 routinerecommended polling time: ( 2) minutes.Extended self-test routinerecommended polling time: ( 36) minutes.SCT capabilities: (0x303f) SCT Status supported. SCT Error Recovery Control supported. SCT Feature Control supported. SCT Data Table supported.SMART Attributes Data Structure revision number: 16Vendor Specific SMART Attributes with Thresholds:ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 0 3 Spin_Up_Time 0x0027 143 140 021 Pre-fail Always - 3841 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 178 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002f 100 253 051 Pre-fail Always - 0 9 Power_On_Hours 0x0032 058 058 000 Old_age Always - 31203 10 Spin_Retry_Count 0x0033 100 100 051 Pre-fail Always - 0 11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 175184 End-to-End_Error 0x0033 100 100 097 Pre-fail Always - 0187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0190 Airflow_Temperature_Cel 0x0022 066 062 040 Old_age Always - 34192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 103193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 178196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 0199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0200 Multi_Zone_Error_Rate 0x0008 200 200 000 Old_age Offline - 0SMART Error Log Version: 1No Errors LoggedSMART Self-test log structure revision number 1Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error# 1 Short offline Completed without error 00% 30349 -# 2 Extended offline Aborted by host 80% 0 -SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testingSelective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk.If Selective self-test is pending on power-up, resume after 0 minute delay.
Hay muchos otros comandos para examinar los discos y los sistemas de archivos. Los descritos aquí son algunos de los más útiles e informativos. Utilizarlos periódicamente tiene ventajas, ya que la forma más fácil de detectar problemas es acostumbrarse tanto a la salida de comandos como estos que se puede detectar fácilmente el tipo de diferencias que podrían indicar problemas.