[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-/blog/tutorial/configurar-raid-software-linux":3,"prev-/blog/tutorial/configurar-raid-software-linux":1314,"next-/blog/tutorial/configurar-raid-software-linux":1315,"related-/blog/tutorial/configurar-raid-software-linux":1318},{"id":4,"title":5,"author":6,"authorUrl":7,"body":8,"category":1282,"cta":1283,"date":1285,"dateModified":1285,"description":1286,"draft":1287,"extension":1288,"faq":1289,"featured":1287,"image":1302,"imageAlt":1303,"meta":1304,"navigation":236,"path":1305,"readingTime":374,"seo":1306,"stem":1307,"tags":1308,"__hash__":1313},"blog/blog/tutorial/configurar-raid-software-linux.md","Configurar RAID por software en un servidor Linux","Syswork México","/nosotros",{"type":9,"value":10,"toc":1257},"minimark",[11,21,29,34,37,66,74,77,94,98,132,136,139,147,152,269,276,279,304,307,311,394,398,499,503,506,512,516,630,633,653,691,693,697,700,704,723,726,732,735,739,747,778,781,785,865,868,918,922,925,929,974,977,981,1001,1005,1008,1070,1073,1091,1093,1097,1100,1125,1153,1156,1160,1167,1178,1184,1190,1196,1200,1203,1244,1253],[12,13,14,15,20],"p",{},"Un servidor de producción sin RAID es una apuesta. Los discos duros fallan — no es cuestión de si, es cuestión de cuándo. Un disco mecánico típico tiene una vida útil de 3-5 años; los SSD, 5-10 años. Cuando ese disco falla y tu base de datos, tu ",[16,17,19],"a",{"href":18},"/soluciones/erp","ERP"," o tus archivos están ahí, todo se detiene. RAID te da tiempo: cuando un disco falla, los datos siguen disponibles mientras reemplazas el disco y reconstruyes el array.",[12,22,23,24,28],{},"En esta guía vas a configurar RAID 1 (espejo) y RAID 5 por software con mdadm en Ubuntu — los dos niveles más comunes en ",[16,25,27],{"href":26},"/servicios/servidores","servidores"," de producción.",[30,31,33],"h2",{"id":32},"requisitos-previos","Requisitos previos",[12,35,36],{},"Un servidor Ubuntu 24.04 con al menos 2 discos adicionales (además del disco del sistema operativo). En esta guía usamos:",[38,39,40,48,54,60],"ul",{},[41,42,43,47],"li",{},[44,45,46],"code",{},"/dev/sda"," — Disco del sistema operativo (no lo tocamos)",[41,49,50,53],{},[44,51,52],{},"/dev/sdb"," — Disco 1 para RAID",[41,55,56,59],{},[44,57,58],{},"/dev/sdc"," — Disco 2 para RAID",[41,61,62,65],{},[44,63,64],{},"/dev/sdd"," — Disco 3 para RAID (solo para RAID 5)",[67,68,71],"alert",{"title":69,"type":70},"Datos existentes","warning",[12,72,73],{},"Todo lo que esté en los discos que uses para RAID se borrará. Asegúrate de usar discos vacíos o datos que puedas perder. Nunca incluyas el disco del sistema operativo en el array RAID de datos.",[12,75,76],{},"Verifica tus discos:",[78,79,84],"pre",{"className":80,"code":81,"language":82,"meta":83,"style":83},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","lsblk\n","bash","",[44,85,86],{"__ignoreMap":83},[87,88,91],"span",{"class":89,"line":90},"line",1,[87,92,81],{"class":93},"sbgvK",[30,95,97],{"id":96},"instalar-mdadm","Instalar mdadm",[78,99,101],{"className":80,"code":100,"language":82,"meta":83,"style":83},"sudo apt update\nsudo apt install mdadm -y\n",[44,102,103,115],{"__ignoreMap":83},[87,104,105,108,112],{"class":89,"line":90},[87,106,107],{"class":93},"sudo",[87,109,111],{"class":110},"s_sjI"," apt",[87,113,114],{"class":110}," update\n",[87,116,118,120,122,125,128],{"class":89,"line":117},2,[87,119,107],{"class":93},[87,121,111],{"class":110},[87,123,124],{"class":110}," install",[87,126,127],{"class":110}," mdadm",[87,129,131],{"class":130},"stzsN"," -y\n",[30,133,135],{"id":134},"opción-a-raid-1-espejo-2-discos","Opción A: RAID 1 (Espejo — 2 discos)",[12,137,138],{},"RAID 1 mantiene una copia idéntica de los datos en ambos discos. Si uno falla, el otro tiene toda la información. Es la configuración más simple y confiable para servidores con 2 discos.",[78,140,145],{"className":141,"code":143,"language":144},[142],"language-text","┌─────────┐     ┌─────────┐\n│ /dev/sdb │     │ /dev/sdc │\n│          │     │          │\n│  Datos   │◄──►│  Copia   │\n│  100%    │     │  100%    │\n│          │     │          │\n└─────────┘     └─────────┘\n     ↕                ↕\n   Disco 1         Disco 2\n   1 TB útil de 2 TB total\n","text",[44,146,143],{"__ignoreMap":83},[148,149,151],"h3",{"id":150},"crear-el-array-raid-1","Crear el array RAID 1",[78,153,155],{"className":80,"code":154,"language":82,"meta":83,"style":83},"# Crear particiones en ambos discos\nsudo parted /dev/sdb mklabel gpt\nsudo parted /dev/sdb mkpart primary 0% 100%\nsudo parted /dev/sdc mklabel gpt\nsudo parted /dev/sdc mkpart primary 0% 100%\n\n# Crear el array RAID 1\nsudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1\n",[44,156,157,163,179,200,214,231,238,244],{"__ignoreMap":83},[87,158,159],{"class":89,"line":90},[87,160,162],{"class":161},"sutJx","# Crear particiones en ambos discos\n",[87,164,165,167,170,173,176],{"class":89,"line":117},[87,166,107],{"class":93},[87,168,169],{"class":110}," parted",[87,171,172],{"class":110}," /dev/sdb",[87,174,175],{"class":110}," mklabel",[87,177,178],{"class":110}," gpt\n",[87,180,182,184,186,188,191,194,197],{"class":89,"line":181},3,[87,183,107],{"class":93},[87,185,169],{"class":110},[87,187,172],{"class":110},[87,189,190],{"class":110}," mkpart",[87,192,193],{"class":110}," primary",[87,195,196],{"class":110}," 0%",[87,198,199],{"class":110}," 100%\n",[87,201,203,205,207,210,212],{"class":89,"line":202},4,[87,204,107],{"class":93},[87,206,169],{"class":110},[87,208,209],{"class":110}," /dev/sdc",[87,211,175],{"class":110},[87,213,178],{"class":110},[87,215,217,219,221,223,225,227,229],{"class":89,"line":216},5,[87,218,107],{"class":93},[87,220,169],{"class":110},[87,222,209],{"class":110},[87,224,190],{"class":110},[87,226,193],{"class":110},[87,228,196],{"class":110},[87,230,199],{"class":110},[87,232,234],{"class":89,"line":233},6,[87,235,237],{"emptyLinePlaceholder":236},true,"\n",[87,239,241],{"class":89,"line":240},7,[87,242,243],{"class":161},"# Crear el array RAID 1\n",[87,245,247,249,251,254,257,260,263,266],{"class":89,"line":246},8,[87,248,107],{"class":93},[87,250,127],{"class":110},[87,252,253],{"class":130}," --create",[87,255,256],{"class":110}," /dev/md0",[87,258,259],{"class":130}," --level=1",[87,261,262],{"class":130}," --raid-devices=2",[87,264,265],{"class":110}," /dev/sdb1",[87,267,268],{"class":110}," /dev/sdc1\n",[12,270,271,272,275],{},"mdadm te pregunta si quieres continuar — confirma con ",[44,273,274],{},"y",". El array comienza a sincronizarse inmediatamente. Puedes usarlo mientras se sincroniza, pero con rendimiento reducido.",[12,277,278],{},"Verifica el estado:",[78,280,282],{"className":80,"code":281,"language":82,"meta":83,"style":83},"sudo mdadm --detail /dev/md0\ncat /proc/mdstat\n",[44,283,284,296],{"__ignoreMap":83},[87,285,286,288,290,293],{"class":89,"line":90},[87,287,107],{"class":93},[87,289,127],{"class":110},[87,291,292],{"class":130}," --detail",[87,294,295],{"class":110}," /dev/md0\n",[87,297,298,301],{"class":89,"line":117},[87,299,300],{"class":93},"cat",[87,302,303],{"class":110}," /proc/mdstat\n",[305,306],"ad-banner",{},[148,308,310],{"id":309},"formatear-y-montar","Formatear y montar",[78,312,314],{"className":80,"code":313,"language":82,"meta":83,"style":83},"# Formatear con ext4\nsudo mkfs.ext4 /dev/md0\n\n# Crear punto de montaje\nsudo mkdir -p /datos\n\n# Montar\nsudo mount /dev/md0 /datos\n\n# Verificar\ndf -h /datos\n",[44,315,316,321,330,334,339,352,356,361,372,377,383],{"__ignoreMap":83},[87,317,318],{"class":89,"line":90},[87,319,320],{"class":161},"# Formatear con ext4\n",[87,322,323,325,328],{"class":89,"line":117},[87,324,107],{"class":93},[87,326,327],{"class":110}," mkfs.ext4",[87,329,295],{"class":110},[87,331,332],{"class":89,"line":181},[87,333,237],{"emptyLinePlaceholder":236},[87,335,336],{"class":89,"line":202},[87,337,338],{"class":161},"# Crear punto de montaje\n",[87,340,341,343,346,349],{"class":89,"line":216},[87,342,107],{"class":93},[87,344,345],{"class":110}," mkdir",[87,347,348],{"class":130}," -p",[87,350,351],{"class":110}," /datos\n",[87,353,354],{"class":89,"line":233},[87,355,237],{"emptyLinePlaceholder":236},[87,357,358],{"class":89,"line":240},[87,359,360],{"class":161},"# Montar\n",[87,362,363,365,368,370],{"class":89,"line":246},[87,364,107],{"class":93},[87,366,367],{"class":110}," mount",[87,369,256],{"class":110},[87,371,351],{"class":110},[87,373,375],{"class":89,"line":374},9,[87,376,237],{"emptyLinePlaceholder":236},[87,378,380],{"class":89,"line":379},10,[87,381,382],{"class":161},"# Verificar\n",[87,384,386,389,392],{"class":89,"line":385},11,[87,387,388],{"class":93},"df",[87,390,391],{"class":130}," -h",[87,393,351],{"class":110},[148,395,397],{"id":396},"montaje-automático-al-reiniciar","Montaje automático al reiniciar",[78,399,401],{"className":80,"code":400,"language":82,"meta":83,"style":83},"# Obtener UUID del array\nsudo blkid /dev/md0\n\n# Agregar al fstab\necho \"UUID=tu-uuid-aqui  /datos  ext4  defaults  0  2\" | sudo tee -a /etc/fstab\n\n# Guardar configuración de mdadm\nsudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf\nsudo update-initramfs -u\n",[44,402,403,408,417,421,426,458,462,467,489],{"__ignoreMap":83},[87,404,405],{"class":89,"line":90},[87,406,407],{"class":161},"# Obtener UUID del array\n",[87,409,410,412,415],{"class":89,"line":117},[87,411,107],{"class":93},[87,413,414],{"class":110}," blkid",[87,416,295],{"class":110},[87,418,419],{"class":89,"line":181},[87,420,237],{"emptyLinePlaceholder":236},[87,422,423],{"class":89,"line":202},[87,424,425],{"class":161},"# Agregar al fstab\n",[87,427,428,432,436,439,442,446,449,452,455],{"class":89,"line":216},[87,429,431],{"class":430},"sptTA","echo",[87,433,435],{"class":434},"sjJ54"," \"",[87,437,438],{"class":110},"UUID=tu-uuid-aqui  /datos  ext4  defaults  0  2",[87,440,441],{"class":434},"\"",[87,443,445],{"class":444},"smGrS"," |",[87,447,448],{"class":93}," sudo",[87,450,451],{"class":110}," tee",[87,453,454],{"class":130}," -a",[87,456,457],{"class":110}," /etc/fstab\n",[87,459,460],{"class":89,"line":233},[87,461,237],{"emptyLinePlaceholder":236},[87,463,464],{"class":89,"line":240},[87,465,466],{"class":161},"# Guardar configuración de mdadm\n",[87,468,469,471,473,475,478,480,482,484,486],{"class":89,"line":246},[87,470,107],{"class":93},[87,472,127],{"class":110},[87,474,292],{"class":130},[87,476,477],{"class":130}," --scan",[87,479,445],{"class":444},[87,481,448],{"class":93},[87,483,451],{"class":110},[87,485,454],{"class":130},[87,487,488],{"class":110}," /etc/mdadm/mdadm.conf\n",[87,490,491,493,496],{"class":89,"line":374},[87,492,107],{"class":93},[87,494,495],{"class":110}," update-initramfs",[87,497,498],{"class":130}," -u\n",[30,500,502],{"id":501},"opción-b-raid-5-paridad-distribuida-3-discos","Opción B: RAID 5 (Paridad distribuida — 3+ discos)",[12,504,505],{},"RAID 5 distribuye los datos y la paridad entre todos los discos. Tolera la falla de un disco y ofrece mejor aprovechamiento del espacio que RAID 1 con 3+ discos.",[78,507,510],{"className":508,"code":509,"language":144},[142],"┌─────────┐     ┌─────────┐     ┌─────────┐\n│ /dev/sdb │     │ /dev/sdc │     │ /dev/sdd │\n│          │     │          │     │          │\n│ Datos A  │     │ Datos B  │     │Paridad AB│\n│Paridad CD│     │ Datos C  │     │ Datos D  │\n│ Datos E  │     │Paridad EF│     │ Datos F  │\n└─────────┘     └─────────┘     └─────────┘\n   Disco 1        Disco 2        Disco 3\n   2 TB útiles de 3 TB total\n",[44,511,509],{"__ignoreMap":83},[148,513,515],{"id":514},"crear-el-array-raid-5","Crear el array RAID 5",[78,517,519],{"className":80,"code":518,"language":82,"meta":83,"style":83},"# Crear particiones en los 3 discos\nfor disk in sdb sdc sdd; do\n  sudo parted /dev/$disk mklabel gpt\n  sudo parted /dev/$disk mkpart primary 0% 100%\ndone\n\n# Crear el array RAID 5\nsudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1\n",[44,520,521,526,555,573,592,597,601,606],{"__ignoreMap":83},[87,522,523],{"class":89,"line":90},[87,524,525],{"class":161},"# Crear particiones en los 3 discos\n",[87,527,528,532,536,539,542,545,548,552],{"class":89,"line":117},[87,529,531],{"class":530},"sVHd0","for",[87,533,535],{"class":534},"su5hD"," disk ",[87,537,538],{"class":530},"in",[87,540,541],{"class":110}," sdb",[87,543,544],{"class":110}," sdc",[87,546,547],{"class":110}," sdd",[87,549,551],{"class":550},"sP7_E",";",[87,553,554],{"class":530}," do\n",[87,556,557,560,562,565,568,571],{"class":89,"line":181},[87,558,559],{"class":93},"  sudo",[87,561,169],{"class":110},[87,563,564],{"class":110}," /dev/",[87,566,567],{"class":534},"$disk ",[87,569,570],{"class":110},"mklabel",[87,572,178],{"class":110},[87,574,575,577,579,581,583,586,588,590],{"class":89,"line":202},[87,576,559],{"class":93},[87,578,169],{"class":110},[87,580,564],{"class":110},[87,582,567],{"class":534},[87,584,585],{"class":110},"mkpart",[87,587,193],{"class":110},[87,589,196],{"class":110},[87,591,199],{"class":110},[87,593,594],{"class":89,"line":216},[87,595,596],{"class":530},"done\n",[87,598,599],{"class":89,"line":233},[87,600,237],{"emptyLinePlaceholder":236},[87,602,603],{"class":89,"line":240},[87,604,605],{"class":161},"# Crear el array RAID 5\n",[87,607,608,610,612,614,616,619,622,624,627],{"class":89,"line":246},[87,609,107],{"class":93},[87,611,127],{"class":110},[87,613,253],{"class":130},[87,615,256],{"class":110},[87,617,618],{"class":130}," --level=5",[87,620,621],{"class":130}," --raid-devices=3",[87,623,265],{"class":110},[87,625,626],{"class":110}," /dev/sdc1",[87,628,629],{"class":110}," /dev/sdd1\n",[12,631,632],{},"La sincronización inicial de RAID 5 toma más tiempo que RAID 1 porque necesita calcular la paridad. Para discos de 1 TB puede tomar 2-4 horas:",[78,634,636],{"className":80,"code":635,"language":82,"meta":83,"style":83},"# Monitorear progreso\nwatch cat /proc/mdstat\n",[44,637,638,643],{"__ignoreMap":83},[87,639,640],{"class":89,"line":90},[87,641,642],{"class":161},"# Monitorear progreso\n",[87,644,645,648,651],{"class":89,"line":117},[87,646,647],{"class":93},"watch",[87,649,650],{"class":110}," cat",[87,652,303],{"class":110},[78,654,656],{"className":80,"code":655,"language":82,"meta":83,"style":83},"# Formatear y montar (igual que RAID 1)\nsudo mkfs.ext4 /dev/md0\nsudo mkdir -p /datos\nsudo mount /dev/md0 /datos\n",[44,657,658,663,671,681],{"__ignoreMap":83},[87,659,660],{"class":89,"line":90},[87,661,662],{"class":161},"# Formatear y montar (igual que RAID 1)\n",[87,664,665,667,669],{"class":89,"line":117},[87,666,107],{"class":93},[87,668,327],{"class":110},[87,670,295],{"class":110},[87,672,673,675,677,679],{"class":89,"line":181},[87,674,107],{"class":93},[87,676,345],{"class":110},[87,678,348],{"class":130},[87,680,351],{"class":110},[87,682,683,685,687,689],{"class":89,"line":202},[87,684,107],{"class":93},[87,686,367],{"class":110},[87,688,256],{"class":110},[87,690,351],{"class":110},[305,692],{},[30,694,696],{"id":695},"monitoreo-del-raid","Monitoreo del RAID",[12,698,699],{},"Un RAID sin monitoreo es tan peligroso como no tener RAID. Si un disco falla y no te enteras, el segundo disco puede fallar y pierdes todo.",[148,701,703],{"id":702},"configurar-alertas-por-correo","Configurar alertas por correo",[78,705,707],{"className":80,"code":706,"language":82,"meta":83,"style":83},"# Configurar email en mdadm.conf\nsudo nano /etc/mdadm/mdadm.conf\n",[44,708,709,714],{"__ignoreMap":83},[87,710,711],{"class":89,"line":90},[87,712,713],{"class":161},"# Configurar email en mdadm.conf\n",[87,715,716,718,721],{"class":89,"line":117},[87,717,107],{"class":93},[87,719,720],{"class":110}," nano",[87,722,488],{"class":110},[12,724,725],{},"Agrega o modifica:",[78,727,730],{"className":728,"code":729,"language":144},[142],"MAILADDR admin@tuempresa.com\n",[44,731,729],{"__ignoreMap":83},[12,733,734],{},"mdadm envía un correo automáticamente si detecta un disco degradado o fallido.",[148,736,738],{"id":737},"monitoreo-con-zabbix-o-prometheus","Monitoreo con Zabbix o Prometheus",[12,740,741,742,746],{},"Para integrar con ",[16,743,745],{"href":744},"/blog/monitoreo-grafana-prometheus","Grafana y Prometheus",", node_exporter ya incluye métricas de mdadm:",[78,748,752],{"className":749,"code":750,"language":751,"meta":83,"style":83},"language-promql shiki shiki-themes material-theme-lighter github-light github-dark","# Discos activos en el array\nnode_md_disks{state=\"active\"}\n\n# Array degradado (menos discos activos que esperados)\nnode_md_disks{state=\"active\"} \u003C node_md_disks_required\n","promql",[44,753,754,759,764,768,773],{"__ignoreMap":83},[87,755,756],{"class":89,"line":90},[87,757,758],{},"# Discos activos en el array\n",[87,760,761],{"class":89,"line":117},[87,762,763],{},"node_md_disks{state=\"active\"}\n",[87,765,766],{"class":89,"line":181},[87,767,237],{"emptyLinePlaceholder":236},[87,769,770],{"class":89,"line":202},[87,771,772],{},"# Array degradado (menos discos activos que esperados)\n",[87,774,775],{"class":89,"line":216},[87,776,777],{},"node_md_disks{state=\"active\"} \u003C node_md_disks_required\n",[12,779,780],{},"Crea una alerta en Grafana cuando el array esté degradado.",[148,782,784],{"id":783},"verificación-manual","Verificación manual",[78,786,788],{"className":80,"code":787,"language":82,"meta":83,"style":83},"# Estado del array\nsudo mdadm --detail /dev/md0\n\n# Estado rápido\ncat /proc/mdstat\n\n# Salud de cada disco con SMART\nsudo apt install smartmontools -y\nsudo smartctl -a /dev/sdb\nsudo smartctl -a /dev/sdc\n",[44,789,790,795,805,809,814,820,824,829,842,854],{"__ignoreMap":83},[87,791,792],{"class":89,"line":90},[87,793,794],{"class":161},"# Estado del array\n",[87,796,797,799,801,803],{"class":89,"line":117},[87,798,107],{"class":93},[87,800,127],{"class":110},[87,802,292],{"class":130},[87,804,295],{"class":110},[87,806,807],{"class":89,"line":181},[87,808,237],{"emptyLinePlaceholder":236},[87,810,811],{"class":89,"line":202},[87,812,813],{"class":161},"# Estado rápido\n",[87,815,816,818],{"class":89,"line":216},[87,817,300],{"class":93},[87,819,303],{"class":110},[87,821,822],{"class":89,"line":233},[87,823,237],{"emptyLinePlaceholder":236},[87,825,826],{"class":89,"line":240},[87,827,828],{"class":161},"# Salud de cada disco con SMART\n",[87,830,831,833,835,837,840],{"class":89,"line":246},[87,832,107],{"class":93},[87,834,111],{"class":110},[87,836,124],{"class":110},[87,838,839],{"class":110}," smartmontools",[87,841,131],{"class":130},[87,843,844,846,849,851],{"class":89,"line":374},[87,845,107],{"class":93},[87,847,848],{"class":110}," smartctl",[87,850,454],{"class":130},[87,852,853],{"class":110}," /dev/sdb\n",[87,855,856,858,860,862],{"class":89,"line":379},[87,857,107],{"class":93},[87,859,848],{"class":110},[87,861,454],{"class":130},[87,863,864],{"class":110}," /dev/sdc\n",[12,866,867],{},"Programa un check semanal de SMART para detectar discos que están por fallar antes de que fallen:",[78,869,871],{"className":80,"code":870,"language":82,"meta":83,"style":83},"# Crontab semanal\n0 3 * * 0 /usr/sbin/smartctl -t short /dev/sdb && /usr/sbin/smartctl -t short /dev/sdc\n",[44,872,873,878],{"__ignoreMap":83},[87,874,875],{"class":89,"line":90},[87,876,877],{"class":161},"# Crontab semanal\n",[87,879,880,883,887,891,893,896,899,902,905,907,910,912,914,916],{"class":89,"line":117},[87,881,882],{"class":93},"0",[87,884,886],{"class":885},"srdBf"," 3",[87,888,890],{"class":889},"s_hVV"," *",[87,892,890],{"class":889},[87,894,895],{"class":885}," 0",[87,897,898],{"class":110}," /usr/sbin/smartctl",[87,900,901],{"class":130}," -t",[87,903,904],{"class":110}," short",[87,906,172],{"class":110},[87,908,909],{"class":550}," &&",[87,911,898],{"class":93},[87,913,901],{"class":130},[87,915,904],{"class":110},[87,917,864],{"class":110},[30,919,921],{"id":920},"simulación-de-fallo-y-recuperación","Simulación de fallo y recuperación",[12,923,924],{},"Saber cómo recuperarse de un fallo es tan importante como configurar el RAID. Practica esto en un ambiente de pruebas:",[148,926,928],{"id":927},"simular-fallo-de-disco","Simular fallo de disco",[78,930,932],{"className":80,"code":931,"language":82,"meta":83,"style":83},"# Marcar un disco como fallido\nsudo mdadm --manage /dev/md0 --fail /dev/sdc1\n\n# Verificar estado — debería mostrar \"degraded\"\nsudo mdadm --detail /dev/md0\n",[44,933,934,939,955,959,964],{"__ignoreMap":83},[87,935,936],{"class":89,"line":90},[87,937,938],{"class":161},"# Marcar un disco como fallido\n",[87,940,941,943,945,948,950,953],{"class":89,"line":117},[87,942,107],{"class":93},[87,944,127],{"class":110},[87,946,947],{"class":130}," --manage",[87,949,256],{"class":110},[87,951,952],{"class":130}," --fail",[87,954,268],{"class":110},[87,956,957],{"class":89,"line":181},[87,958,237],{"emptyLinePlaceholder":236},[87,960,961],{"class":89,"line":202},[87,962,963],{"class":161},"# Verificar estado — debería mostrar \"degraded\"\n",[87,965,966,968,970,972],{"class":89,"line":216},[87,967,107],{"class":93},[87,969,127],{"class":110},[87,971,292],{"class":130},[87,973,295],{"class":110},[12,975,976],{},"El array sigue funcionando pero degradado — sin protección contra un segundo fallo.",[148,978,980],{"id":979},"remover-disco-fallido","Remover disco fallido",[78,982,984],{"className":80,"code":983,"language":82,"meta":83,"style":83},"sudo mdadm --manage /dev/md0 --remove /dev/sdc1\n",[44,985,986],{"__ignoreMap":83},[87,987,988,990,992,994,996,999],{"class":89,"line":90},[87,989,107],{"class":93},[87,991,127],{"class":110},[87,993,947],{"class":130},[87,995,256],{"class":110},[87,997,998],{"class":130}," --remove",[87,1000,268],{"class":110},[148,1002,1004],{"id":1003},"agregar-disco-de-reemplazo","Agregar disco de reemplazo",[12,1006,1007],{},"En producción, reemplazas físicamente el disco muerto. Aquí simulamos con el mismo disco:",[78,1009,1011],{"className":80,"code":1010,"language":82,"meta":83,"style":83},"# Crear partición en el disco nuevo\nsudo parted /dev/sdc mklabel gpt\nsudo parted /dev/sdc mkpart primary 0% 100%\n\n# Agregar al array\nsudo mdadm --manage /dev/md0 --add /dev/sdc1\n",[44,1012,1013,1018,1030,1046,1050,1055],{"__ignoreMap":83},[87,1014,1015],{"class":89,"line":90},[87,1016,1017],{"class":161},"# Crear partición en el disco nuevo\n",[87,1019,1020,1022,1024,1026,1028],{"class":89,"line":117},[87,1021,107],{"class":93},[87,1023,169],{"class":110},[87,1025,209],{"class":110},[87,1027,175],{"class":110},[87,1029,178],{"class":110},[87,1031,1032,1034,1036,1038,1040,1042,1044],{"class":89,"line":181},[87,1033,107],{"class":93},[87,1035,169],{"class":110},[87,1037,209],{"class":110},[87,1039,190],{"class":110},[87,1041,193],{"class":110},[87,1043,196],{"class":110},[87,1045,199],{"class":110},[87,1047,1048],{"class":89,"line":202},[87,1049,237],{"emptyLinePlaceholder":236},[87,1051,1052],{"class":89,"line":216},[87,1053,1054],{"class":161},"# Agregar al array\n",[87,1056,1057,1059,1061,1063,1065,1068],{"class":89,"line":233},[87,1058,107],{"class":93},[87,1060,127],{"class":110},[87,1062,947],{"class":130},[87,1064,256],{"class":110},[87,1066,1067],{"class":130}," --add",[87,1069,268],{"class":110},[12,1071,1072],{},"El array comienza la reconstrucción automáticamente:",[78,1074,1076],{"className":80,"code":1075,"language":82,"meta":83,"style":83},"# Monitorear reconstrucción\nwatch cat /proc/mdstat\n",[44,1077,1078,1083],{"__ignoreMap":83},[87,1079,1080],{"class":89,"line":90},[87,1081,1082],{"class":161},"# Monitorear reconstrucción\n",[87,1084,1085,1087,1089],{"class":89,"line":117},[87,1086,647],{"class":93},[87,1088,650],{"class":110},[87,1090,303],{"class":110},[305,1092],{},[30,1094,1096],{"id":1095},"disco-spare-reserva-caliente","Disco spare (reserva caliente)",[12,1098,1099],{},"Si tienes un disco extra, configúralo como spare — un disco de reserva que entra automáticamente cuando uno falla, sin intervención humana:",[78,1101,1103],{"className":80,"code":1102,"language":82,"meta":83,"style":83},"# Agregar spare al array RAID 5\nsudo mdadm --manage /dev/md0 --add /dev/sde1\n",[44,1104,1105,1110],{"__ignoreMap":83},[87,1106,1107],{"class":89,"line":90},[87,1108,1109],{"class":161},"# Agregar spare al array RAID 5\n",[87,1111,1112,1114,1116,1118,1120,1122],{"class":89,"line":117},[87,1113,107],{"class":93},[87,1115,127],{"class":110},[87,1117,947],{"class":130},[87,1119,256],{"class":110},[87,1121,1067],{"class":130},[87,1123,1124],{"class":110}," /dev/sde1\n",[78,1126,1128],{"className":80,"code":1127,"language":82,"meta":83,"style":83},"# Verificar — debería mostrar \"spare\"\nsudo mdadm --detail /dev/md0 | grep spare\n",[44,1129,1130,1135],{"__ignoreMap":83},[87,1131,1132],{"class":89,"line":90},[87,1133,1134],{"class":161},"# Verificar — debería mostrar \"spare\"\n",[87,1136,1137,1139,1141,1143,1145,1147,1150],{"class":89,"line":117},[87,1138,107],{"class":93},[87,1140,127],{"class":110},[87,1142,292],{"class":130},[87,1144,256],{"class":110},[87,1146,445],{"class":444},[87,1148,1149],{"class":93}," grep",[87,1151,1152],{"class":110}," spare\n",[12,1154,1155],{},"Cuando un disco falla, mdadm automáticamente remueve el disco fallido e inicia la reconstrucción con el spare. El tiempo entre fallo y recuperación se reduce de \"hasta que alguien lo note y lo arregle\" a \"inmediato y automático\".",[30,1157,1159],{"id":1158},"buenas-prácticas","Buenas prácticas",[12,1161,1162,1166],{},[1163,1164,1165],"strong",{},"Usa discos del mismo tamaño y modelo"," — mezclar discos de diferente capacidad desperdicia espacio. Mezclar modelos diferentes aumenta el riesgo de fallos simultáneos (mismo lote de fabricación).",[12,1168,1169,1172,1173,1177],{},[1163,1170,1171],{},"RAID no es backup"," — protege contra fallo de disco, no contra borrado accidental, ransomware o corrupción. Siempre configura ",[16,1174,1176],{"href":1175},"/blog/backup-automatizado-python-cron","backup automatizado"," además de RAID.",[12,1179,1180,1183],{},[1163,1181,1182],{},"Monitorea SMART"," — los discos no fallan de golpe; dan señales antes. SMART te avisa cuando un disco está deteriorándose para que lo reemplaces antes de que falle.",[12,1185,1186,1189],{},[1163,1187,1188],{},"Prueba la recuperación"," — al menos una vez al año, simula un fallo y practica el reemplazo de disco. En una emergencia real no quieres estar leyendo documentación.",[12,1191,1192,1195],{},[1163,1193,1194],{},"Documenta la configuración"," — anota qué discos forman el array, qué nivel de RAID, el UUID y la configuración de montaje. Guarda esta documentación fuera del servidor.",[30,1197,1199],{"id":1198},"siguientes-pasos","Siguientes pasos",[12,1201,1202],{},"Con RAID configurado, tu almacenamiento tiene la primera capa de protección. Para completar la estrategia:",[38,1204,1205,1211,1217,1227,1235],{},[41,1206,1207,1210],{},[1163,1208,1209],{},"LVM sobre RAID"," — Logical Volume Manager para redimensionar particiones sin downtime",[41,1212,1213,1216],{},[1163,1214,1215],{},"ZFS"," — sistema de archivos con RAID integrado, snapshots y checksums (alternativa a mdadm + ext4)",[41,1218,1219,1226],{},[1163,1220,1221,1225],{},[16,1222,1224],{"href":1223},"/tecnologias/proxmox","Proxmox"," + Ceph"," — almacenamiento distribuido con redundancia para clusters de virtualización",[41,1228,1229,1234],{},[1163,1230,1231],{},[16,1232,1233],{"href":1175},"Backup automatizado"," — la segunda capa de protección que RAID no reemplaza",[41,1236,1237,1243],{},[1163,1238,1239],{},[16,1240,1242],{"href":1241},"/servicios/infraestructura","Infraestructura profesional"," — diseño completo de almacenamiento con RAID, LVM, backup y monitoreo",[1245,1246],"call-to-action",{"description":1247,"eyebrow":1248,"icon":1249,"label":1250,"title":1251,"to":1252},"Evaluamos tu carga de trabajo y diseñamos la configuración de RAID, particiones, backup y monitoreo óptima para tu operación.","Almacenamiento empresarial","i-lucide-hard-drive","Solicitar evaluación","¿Necesitas diseñar el almacenamiento de tu servidor?","/contacto",[1254,1255,1256],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":83,"searchDepth":117,"depth":181,"links":1258},[1259,1260,1261,1266,1269,1274,1279,1280,1281],{"id":32,"depth":117,"text":33},{"id":96,"depth":117,"text":97},{"id":134,"depth":117,"text":135,"children":1262},[1263,1264,1265],{"id":150,"depth":181,"text":151},{"id":309,"depth":181,"text":310},{"id":396,"depth":181,"text":397},{"id":501,"depth":117,"text":502,"children":1267},[1268],{"id":514,"depth":181,"text":515},{"id":695,"depth":117,"text":696,"children":1270},[1271,1272,1273],{"id":702,"depth":181,"text":703},{"id":737,"depth":181,"text":738},{"id":783,"depth":181,"text":784},{"id":920,"depth":117,"text":921,"children":1275},[1276,1277,1278],{"id":927,"depth":181,"text":928},{"id":979,"depth":181,"text":980},{"id":1003,"depth":181,"text":1004},{"id":1095,"depth":117,"text":1096},{"id":1158,"depth":117,"text":1159},{"id":1198,"depth":117,"text":1199},"tutorial",{"title":1251,"description":1284,"label":1250,"to":1252,"icon":1249},"Evaluamos tu carga de trabajo y diseñamos la configuración de discos, RAID y almacenamiento óptima para tu operación.","2026-01-02","Guía paso a paso para configurar RAID 1 y RAID 5 por software con mdadm en Ubuntu, incluyendo creación, montaje, monitoreo y recuperación ante fallo de disco.",false,"md",[1290,1293,1296,1299],{"question":1291,"answer":1292},"¿Cuál es la diferencia entre RAID por hardware y RAID por software?","RAID por hardware usa una tarjeta controladora dedicada con su propio procesador y memoria para gestionar los discos. RAID por software (mdadm) usa el CPU del servidor y el kernel de Linux. En servidores modernos con CPUs potentes, el rendimiento de RAID por software es prácticamente idéntico al de hardware, y tiene la ventaja de que puedes mover los discos a otro servidor sin depender de una controladora específica.",{"question":1294,"answer":1295},"¿RAID reemplaza al backup?","No. RAID protege contra fallo de disco — si un disco muere, los datos sobreviven. Pero NO protege contra borrado accidental, ransomware, corrupción de datos o desastres. Si borras un archivo de un RAID, se borra de todos los discos. Siempre necesitas backup además de RAID.",{"question":1297,"answer":1298},"¿Qué nivel de RAID debería usar?","RAID 1 (espejo) para servidores con 2 discos — simple, confiable, tolera 1 fallo. RAID 5 para servidores con 3+ discos — buen balance entre capacidad y protección, tolera 1 fallo. RAID 10 para bases de datos de alto rendimiento con 4+ discos — combina velocidad de RAID 0 con protección de RAID 1. Nunca uses RAID 0 en producción — un disco que falla y pierdes todo.",{"question":1300,"answer":1301},"¿Cuánto espacio pierdo con RAID?","RAID 1 usa el 50% del almacenamiento total (2 discos de 1 TB = 1 TB útil). RAID 5 pierde el equivalente a un disco (3 discos de 1 TB = 2 TB útiles, 4 discos de 1 TB = 3 TB útiles). RAID 10 usa el 50% (4 discos de 1 TB = 2 TB útiles). Es el costo de la redundancia — y vale cada byte.","/images/blog/raid-software-linux.jpg","Servidor abierto mostrando bahías de disco duro con indicadores LED de actividad en configuración RAID",{},"/blog/tutorial/configurar-raid-software-linux",{"title":5,"description":1286},"blog/tutorial/configurar-raid-software-linux",[1309,1310,27,1311,1312,1282],"raid","linux","almacenamiento","mdadm","Emv0W2bfqJO1LxKHJOeIgXJhql2S1xX8FOn7jgoNda0",null,{"path":1316,"title":1317},"/blog/tutorial/instalar-nextcloud-servidor","Instalar y configurar Nextcloud en tu propio servidor",[1319,1327,1334],{"path":1320,"title":1321,"description":1322,"date":1323,"category":1282,"image":1324,"imageAlt":1325,"readingTime":1326},"/blog/tutorial/apis-rest-python-fastapi","Crear APIs REST con Python y FastAPI para integraciones empresariales","Guía paso a paso para construir una API REST profesional con Python y FastAPI que conecte tu ERP, CRM o cualquier sistema con validación, autenticación y documentación automática.","2026-03-04","/images/blog/fastapi-api-rest.jpg","Editor de código mostrando una API FastAPI con documentación Swagger generada automáticamente",12,{"path":1328,"title":1329,"description":1330,"date":1331,"category":1282,"image":1332,"imageAlt":1333,"readingTime":246},"/blog/tutorial/configurar-firewall-ufw-linux","Configurar firewall en Linux con UFW — reglas esenciales","Guía paso a paso para configurar UFW (Uncomplicated Firewall) en Ubuntu y Debian con las reglas esenciales para proteger servidores de producción.","2026-03-01","/images/blog/ufw-firewall-linux.jpg","Terminal de Linux mostrando reglas de firewall UFW activas protegiendo un servidor de producción",{"path":1335,"title":1336,"description":1337,"date":1338,"category":1282,"image":1339,"imageAlt":1340,"readingTime":379},"/blog/tutorial/traefik-reverse-proxy-docker","Configurar Traefik como reverse proxy para contenedores Docker","Guía paso a paso para instalar Traefik como reverse proxy con descubrimiento automático de contenedores Docker, SSL con Let's Encrypt y dashboard de monitoreo.","2026-02-28","/images/blog/traefik-docker.jpg","Dashboard de Traefik mostrando rutas automáticas hacia múltiples contenedores Docker con SSL activo"]