Causas y soluciones del error 507 Insufficient Storage | Espacio en disco, S3, entorno en la nube
El error "507 Insufficient Storage" puede ocurrir durante la carga de archivos o al escribir grandes volúmenes de datos. Este error indica que el servidor carece de la capacidad de almacenamiento necesaria para procesar la solicitud. Este artículo explica sistemáticamente las causas del error 507, cómo verificar la capacidad del disco, estrategias para prevenir el crecimiento de registros, gestión de capacidad de almacenamiento en la nube y configuración de monitoreo.
¿Qué es un error 507?
HTTP 507 Insufficient Storage es un código de estado definido en RFC 4918 (extensión WebDAV). Se devuelve cuando el servidor no puede asignar el espacio de almacenamiento necesario para completar la solicitud. Originalmente un estado para el protocolo WebDAV, ahora también se utiliza como un error general para problemas relacionados con almacenamiento de archivos.
Este error suele ser una anomalía de estado temporal y se puede resolver liberando espacio en disco. Sin embargo, si se deja sin abordar, puede provocar fallos graves como fallos de escritura en la base de datos, detención de salida de registros y bloqueos de aplicaciones.
| Estado relacionado | Nombre | Diferencias |
|---|---|---|
| 413 | Content Too Large | El tamaño de la solicitud excede el límite configurado (la capacidad del servidor no es un factor) |
| 507 | Insufficient Storage | Capacidad de almacenamiento físico/lógico insuficiente en el servidor |
| 503 | Service Unavailable | Interrupción temporal del servicio (puede deberse a capacidad insuficiente) |
Cómo verificar la capacidad de disco del servidor
Cuando ocurra un error 507, primero verifique la capacidad de disco del servidor. Utilice los comandos a continuación para identificar dónde se está consumiendo espacio en disco.
# ファイルシステムごとの使用量を確認
df -h
# 出力例:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 50G 47G 3.0G 94% /
# /dev/sdb1 200G 180G 20G 90% /data
# 特定ディレクトリの使用量を確認
du -sh /var/log/
du -sh /var/www/
du -sh /tmp/
# サブディレクトリごとの使用量をソートして表示
du -h --max-depth=1 /var/ | sort -rh | head -20
# inode(ファイル数)の使用状況も確認(容量はあるのにファイルが作れない場合)
df -i
# 大きなファイルを探す(100MB以上)
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -20
# 最近24時間以内に更新された大きなファイルを探す
find /var -type f -mtime -1 -size +50M -ls 2>/dev/null
Gestión del tamaño de archivos de registro (logrotate)
Una de las causas más comunes de espacio en disco insuficiente es el aumento del tamaño de los archivos de registro. No es raro que los registros de acceso, registros de errores y registros de aplicaciones se expandan a varios GB. Configure <code>logrotate</code> de Linux correctamente para realizar la rotación automática de registros.
# /etc/logrotate.d/nginx の設定例
/var/log/nginx/*.log {
daily # 毎日ローテーション
missingok # ログファイルが無くてもエラーにしない
rotate 14 # 14世代分を保持
compress # gzip で圧縮
delaycompress # 直近1世代は圧縮しない
notifempty # 空のログはローテーションしない
create 0640 www-data adm # 新しいログファイルの権限
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
endscript
}
# /etc/logrotate.d/app の設定例(アプリケーションログ)
/var/www/app/storage/logs/*.log {
daily
missingok
rotate 7 # 7日分を保持
compress
delaycompress
notifempty
create 0644 www-data www-data
maxsize 100M # 100MB を超えたら日次以外でもローテーション
dateext # 日付をファイル名に付与
dateformat -%Y%m%d
}
# 手動でローテーションを実行(テスト)
sudo logrotate -f /etc/logrotate.d/app
# ドライラン(実行せずに結果を確認)
sudo logrotate -d /etc/logrotate.d/app
# ログのサイズを即座に確認
ls -lhS /var/log/nginx/ | head -10
ls -lhS /var/www/app/storage/logs/ | head -10
Limpieza del directorio tmp
Los archivos temporales, archivos de sesión y archivos de caché de la carga de archivos se acumulan frecuentemente en el directorio <code>/tmp</code>, consumiendo espacio en disco.
# /tmp の使用量を確認
du -sh /tmp/
# 古い一時ファイルの確認(7日以上前)
find /tmp -type f -mtime +7 -ls | head -20
# 古い一時ファイルを削除(7日以上前のファイル)
find /tmp -type f -mtime +7 -delete
# PHPセッションファイルの確認と掃除
du -sh /var/lib/php/sessions/
find /var/lib/php/sessions/ -type f -mtime +1 -delete
# PHPのアップロード一時ファイルが残っていないか確認
ls -la /tmp/php*
# systemd-tmpfiles を使った自動掃除(systemd環境)
# /etc/tmpfiles.d/cleanup.conf に以下を追加:
# d /tmp 1777 root root 7d
# 上記設定は /tmp 内の7日以上前のファイルを自動削除
# cron で定期的に掃除するスクリプト例
# /etc/cron.daily/cleanup-tmp
#!/bin/bash
# 7日以上前のtmpファイルを削除
find /tmp -type f -mtime +7 -delete 2>/dev/null
# アプリケーションのキャッシュを掃除
find /var/www/app/storage/framework/cache -type f -mtime +3 -delete 2>/dev/null
# 容量を記録
echo "$(date '+%Y-%m-%d %H:%M:%S') - $(df -h / | tail -1)" >> /var/log/disk-usage.log
Límites de capacidad en S3 y almacenamiento en la nube
Incluso cuando se utiliza almacenamiento en la nube, se debe prestar atención a las limitaciones de capacidad y costos. Aunque AWS S3 en sí no tiene límite de capacidad de depósito, debe configurar adecuadamente la gestión de costos y las políticas de ciclo de vida.
# AWS CLI で S3 バケットのサイズを確認
aws s3 ls s3://my-bucket --recursive --summarize --human-readable | tail -2
# 出力例:
# Total Objects: 152345
# Total Size: 85.3 GiB
# CloudWatch メトリクスでバケットサイズを確認
aws cloudwatch get-metric-statistics \
--namespace AWS/S3 \
--metric-name BucketSizeBytes \
--dimensions Name=BucketName,Value=my-bucket Name=StorageType,Value=StandardStorage \
--start-time 2026-04-13T00:00:00Z \
--end-time 2026-04-14T00:00:00Z \
--period 86400 \
--statistics Average
// S3 ライフサイクルポリシーの設定例
// 古いファイルを自動的にアーカイブ・削除
{
"Rules": [
{
"ID": "archive-old-uploads",
"Status": "Enabled",
"Filter": {
"Prefix": "uploads/"
},
"Transitions": [
{
"Days": 90,
"StorageClass": "STANDARD_IA"
},
{
"Days": 365,
"StorageClass": "GLACIER"
}
]
},
{
"ID": "delete-temp-files",
"Status": "Enabled",
"Filter": {
"Prefix": "tmp/"
},
"Expiration": {
"Days": 7
}
},
{
"ID": "cleanup-incomplete-uploads",
"Status": "Enabled",
"Filter": {
"Prefix": ""
},
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 3
}
}
]
}
| Servicios en la nube | Límite de capacidad | Límite por archivo | Puntos a tener en cuenta |
|---|---|---|---|
| AWS S3 | Ilimitado | 5TB | La gestión de costos y la configuración de políticas de ciclo de vida son importantes |
| Google Cloud Storage | Ilimitado | 5TB | Tenga cuidado con el aumento de costos cuando se habilita el versionado de objetos |
| Azure Blob Storage | Ilimitado | Aproximadamente 4.75 TB (Block Blob) | Límites de ancho de banda e IOPS por cuenta |
| DigitalOcean Spaces | 250GB (depende del plan) | 5GB | Tenga en cuenta los límites de capacidad de almacenamiento de su plan |
Configuración de monitoreo (alertas de umbral)
La prevención es lo más importante para los errores 507. Configure el monitoreo para alertar cuando el uso de disco supere un umbral determinado.
#!/bin/bash
# /usr/local/bin/disk-alert.sh
# ディスク使用率監視スクリプト
THRESHOLD=80 # 警告しきい値(%)
CRITICAL=90 # 危険しきい値(%)
MAILTO="admin@example.com"
df -h --output=pcent,target | tail -n +2 | while read usage mount; do
# パーセント記号を除去
usage_num=$(echo "$usage" | tr -d '%')
if [ "$usage_num" -ge "$CRITICAL" ]; then
echo "CRITICAL: ${mount} のディスク使用率が ${usage}% です" | \
mail -s "[CRITICAL] ディスク容量警告 - $(hostname)" "$MAILTO"
elif [ "$usage_num" -ge "$THRESHOLD" ]; then
echo "WARNING: ${mount} のディスク使用率が ${usage}% です" | \
mail -s "[WARNING] ディスク容量警告 - $(hostname)" "$MAILTO"
fi
done
# crontab に登録(5分ごとに実行)
# */5 * * * * /usr/local/bin/disk-alert.sh
# Prometheus + node_exporter でのアラート設定例
# /etc/prometheus/alerts/disk.yml
groups:
- name: disk_alerts
rules:
- alert: DiskSpaceWarning
expr: (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 > 80
for: 5m
labels:
severity: warning
annotations:
summary: "ディスク使用率が80%を超えています"
description: "{{ $labels.instance }} の {{ $labels.mountpoint }} の使用率が {{ $value }}% です。"
- alert: DiskSpaceCritical
expr: (1 - node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 > 90
for: 2m
labels:
severity: critical
annotations:
summary: "ディスク使用率が90%を超えています - 即時対応が必要"
description: "{{ $labels.instance }} の {{ $labels.mountpoint }} の使用率が {{ $value }}% です。"
- alert: DiskInodeWarning
expr: (1 - node_filesystem_files_free / node_filesystem_files) * 100 > 80
for: 5m
labels:
severity: warning
annotations:
summary: "inode使用率が80%を超えています"
# Python での簡易ディスク監視スクリプト
import shutil
import smtplib
from email.mime.text import MIMEText
def check_disk_usage(path='/', warning_threshold=80, critical_threshold=90):
"""ディスク使用率を確認してアラートを送信"""
total, used, free = shutil.disk_usage(path)
usage_percent = (used / total) * 100
free_gb = free / (1024 ** 3)
print(f"パス: {path}")
print(f"使用率: {usage_percent:.1f}%")
print(f"空き容量: {free_gb:.1f} GB")
if usage_percent >= critical_threshold:
send_alert(
level="CRITICAL",
message=f"{path} の使用率が {usage_percent:.1f}% です。"
f"空き容量: {free_gb:.1f} GB"
)
elif usage_percent >= warning_threshold:
send_alert(
level="WARNING",
message=f"{path} の使用率が {usage_percent:.1f}% です。"
f"空き容量: {free_gb:.1f} GB"
)
return usage_percent
def send_alert(level, message):
"""メールアラートを送信"""
msg = MIMEText(message)
msg['Subject'] = f"[{level}] ディスク容量アラート"
msg['From'] = "monitor@example.com"
msg['To'] = "admin@example.com"
with smtplib.SMTP('localhost') as server:
server.send_message(msg)
if __name__ == '__main__':
check_disk_usage('/')
check_disk_usage('/data')
Procedimiento de asignación de capacidad en emergencia
Si ocurre un error 507 y el servicio se detiene, siga los pasos a continuación para liberar espacio rápidamente.
# 1. まず現状を把握
df -h
du -h --max-depth=1 / | sort -rh | head -10
# 2. 即座に削除できるファイル
# 古いログファイル(圧縮済み)
rm -f /var/log/nginx/*.gz
rm -f /var/log/syslog.*.gz
# パッケージマネージャーのキャッシュ
apt-get clean # Debian/Ubuntu
yum clean all # CentOS/RHEL
# 古いカーネル(Ubuntu)
apt-get autoremove --purge
# 3. 大きな不要ファイルを探して削除
find /var -type f -size +100M -mtime +30 -ls
find /tmp -type f -mtime +1 -delete
# 4. ログの即時ローテーション
logrotate -f /etc/logrotate.conf
# 5. journalctl のログを圧縮(systemd環境)
journalctl --vacuum-size=100M
journalctl --vacuum-time=7d
# 6. 削除後の確認
df -h
Archivos de prueba para este artículo (gratis)
- → <a href="/ja/files/threshold/png/50mb/" class="text-primary-600 dark:text-primary-400 hover:underline">PNG de prueba de valores límite 50MB</a> — Para verificación de carga de archivos grandes
- → <a href="/ja/files/threshold/png/10mb/" class="text-primary-600 dark:text-primary-400 hover:underline">PNG de prueba de valores límite 10MB</a> — Para pruebas básicas de escritura de almacenamiento
- → <a href="/ja/files/threshold/" class="text-primary-600 dark:text-primary-400 hover:underline">Lista de archivos de prueba de valores límite</a> — Archivos de prueba de varios tamaños
- → <a href="/ja/files/images/" class="text-primary-600 dark:text-primary-400 hover:underline">Lista de imágenes de prueba</a> — Para verificar la funcionalidad de carga
Artículos relacionados
- → <a href="/ja/blog/http-413-error/" class="text-primary-600 dark:text-primary-400 hover:underline">Error 413 Request Entity Too Large: Causas y Soluciones</a>
- → <a href="/ja/blog/http-422-error/" class="text-primary-600 dark:text-primary-400 hover:underline">Error 422 Unprocessable Entity: Causas y Soluciones</a>
- → <a href="/ja/blog/nginx-upload-config/" class="text-primary-600 dark:text-primary-400 hover:underline">Guía de Configuración de Carga de Archivos en Nginx</a>
- → <a href="/ja/blog/s3-upload-limit/" class="text-primary-600 dark:text-primary-400 hover:underline">Resumen de Límites de Carga de Archivos para AWS S3 y CloudFront</a>