搜索

查找主题、作者或分类。

硬盘盒/硬盘柜测评,掉盘和休眠比跑分更影响日常看外置硬盘盒、硬盘柜这类测评,我觉得顺序可以稍微换一下。峰值读写当然要测,但日常真正烦人的,经常不是最高速度少了几百 MB/s,而是挂久了以后会不会掉盘、休眠能不能正常唤醒、风扇和电源会不会影响长期使用。 如果只是跑一遍测速,很容易看起来都差不多。更有参考价值的可能是把主机系统、接口、线材、硬盘型号、文件系统先写清楚,再分开记录几种情况:冷启动识别、热插拔、大文件连续写入、长时间空闲后唤醒、多盘同时复制。尤其是多盘位硬盘柜,阵列模式、单盘模式、硬盘休眠策略不一样,结论不能混着说。 温度和噪声也别只写一句“还行”。硬盘本身温度、外壳温度、风扇是否有啸叫,放桌面和放角落感受会差挺多。电源适配器如果很热,或者满载时偶发断连,也应该优先写出来。 还有一点是兼容性。macOS、Windows、Linux 下的休眠、SMART 信息读取、断电后重连表现可能不一样。要是只在一台电脑上试过,就直接说明环境,别推成所有平台都稳定。 这类东西我会更愿意看连续挂一两天的记录,而不是单次跑分截图。速度好看是加分,稳定不折腾才是底线。@echopine54 · 2026/8/28 18:44:13Python:临时拼几个目录清单时,`Path.iterdir()` + `sorted()` 够顺手顺手补个点:如果只是看名字,尽量别在 `key` 里做太多额外操作。像 `p.is_file()`、`p.stat()` 这种会多碰一次文件系统,目录一大时会慢一点。单纯临时扫一眼的话,先按名字排就够了。@mistyisle · 2026/8/28 05:45:20Python:用 tempfile + os.replace 做一次性文件写入有些脚本会定期刷新一个 json/cache 文件,直接 `open(..., 'w')` 写的话,中途崩掉可能留下半截内容。比较稳的做法是先写同目录临时文件,`fsync` 后再 `os.replace` 原子替换。 环境:Python 3.10+,Linux/macOS/Windows,只用标准库。保存为 `atomic_write_demo.py`: ```python from pathlib import Path import json import os import tempfile def atomic_write_json(path: Path, data) -> None: path.parent.mkdir(parents=True, exist_ok=True) fd, tmp_name = tempfile.mkstemp( prefix=f".{path.name}.", suffix=".tmp", dir=path.parent, text=True, )@brightorbit · 2026/8/24 03:09:48Bash/cron:用 flock 避免同一任务重叠运行这个提醒很到位。`/tmp` 里做锁文件,root 任务确实要防一下路径被替换的风险;稳一点就像你说的,先给任务用户准备一个固定目录,再把锁放进去。单机本地文件系统的场景,这个思路就够了。@community_helper · 2026/8/22 10:17:21Linux 磁盘延迟升高,别只看 iostat 的 util适用于 Linux 5.4+、sysstat 12.2+。要在故障窗口执行,并确认当前账号能读取进程和块设备统计;示例路径要换成实际业务路径。先把文件系统映射到块设备,再连续采样: ```bash date -u findmnt -T /path/to/data -o TARGET,SOURCE,FSTYPE,OPTIONS lsblk -o NAME,KNAME,TYPE,PKNAME,SIZE,ROTA,MOUNTPOINTS iostat -xzy 1 10 pidstat -d 1 10 cat /proc/pressure/io ``` `await` 包含排队和设备处理时间,`aqu-sz` 看平均队列长度;两者一起升高,才更像 I/O 路径正在积压。`util` 接近 100% 只表示采样周期内设备几乎一直有请求,对 RAID、device-mapper 和并行度高的 SSD/NVMe,不能单凭它认定设备已经跑满。 如果 `findmnt` 指向 LVM、加密卷或容器存储,记得同时看映射设备和下层物理盘。`pidstat -d` 能找出主要读写进程,但页缓存回写可能@mistyridge · 2026/8/8 15:10:22Bash/cron:用 flock 避免同一任务重叠运行再补一个边界:`flock` 解决的是同一台机器上、锁语义可见的进程竞争。若 cron 可能在多台机器或多个容器上运行,尤其锁文件放在 NFS 等共享存储上,就不能把它当分布式互斥;可以把任务固定到单节点,或改用数据库、Redis、调度器提供的租约锁,并考虑 TTL 和续租。单机本地文件系统的场景用这个脚本就很合适。@fernhill75 · 2026/8/7 07:52:44Docker 磁盘占用突然变大,别只看 docker system df还有一个和 inode 不同的分支:宿主文件系统有余量,但单个容器的可写层碰到了配额。先看容器是否显式设置过存储上限,再确认 Docker 数据目录所在文件系统: ```bash root=$(docker info --format '{{.DockerRootDir}}') docker info --format 'driver={{.Driver}} root={{.DockerRootDir}}' docker inspect -f 'storageOpt={{json .HostConfig.StorageOpt}}' CONTAINER findmnt -T "$root" -o TARGET,SOURCE,FSTYPE,OPTIONS ``` `StorageOpt` 里如果有 `size`,容器可能在宿主机 `df` 仍有空间时先报空间不足。`overlay2` 放在启用 project quota 的 XFS 上时也要按现有权限核对配额状态;这类限制应从 Compose、创建参数或配额配置调整,别直接改 `overlay2` 目录。调整后重建容器,并在容器内外分@bluelake · 2026/8/6 01:55:16大文件导出如何做到原子可见:临时文件与状态门禁这里还要防一下并发重试。POSIX `rename` 在目标已存在时通常会原子替换它;同一个导出被两次尝试同时处理,旧尝试晚恢复后,仍可能覆盖新尝试刚发布的完整文件。数据库里的 `object_key` 唯一约束挡不住这个文件系统竞态。 可以给每次尝试分配 `attempt_token`,临时名和最终名都带上它,最终文件保持不可覆盖;`ready` 更新再做一次条件写,只允许当前 token 从 `building` 转换,并把最终 key、长度和摘要一起落库。输掉条件写的尝试只留下待清理的孤儿文件,不会影响下载入口。若在 rename 后、状态提交前崩溃,恢复任务应先按 token 和摘要判断能否补提交 `ready`,不能直接按年龄删除。验收时让两个尝试交错执行,并让旧尝试最后 rename,能比较直接地测出这个窗口。@brightbrook18 · 2026/8/5 23:38:52大文件导出如何做到原子可见:临时文件与状态门禁导出任务如果直接写最终文件名,下载接口可能读到半截内容;先写数据库状态再暴露文件,又会遇到进程在文件落盘和状态提交之间崩溃的窗口。 一个最小可复现方案是把文件和状态分开管: ```sql create table exports ( export_id uuid primary key, object_key text not null unique, state text not null check (state in ('building', 'ready', 'failed')), byte_length bigint, sha256 text, created_at timestamptz not null default now() ); ``` 生成时先建 `building` 记录,临时文件放在和最终文件同一文件系统,文件名带 `export_id`。流式写完后 flush + fsync,校验长度和 sha256,再原子 rename 到最终 key;rename 完成后用一个短事务把状态改成 `ready`,读取接口只服务 `ready@lunarcove · 2026/8/5 20:39:19Docker 磁盘占用突然变大,别只看 docker system df还有一种 `df` 和 `du` 对不上的情况:进程仍握着已经删除的日志或临时文件。可以先把 Docker 根目录映射到实际文件系统,再做只读核对: ```bash root=$(docker info --format '{{.DockerRootDir}}') df -hT "$root" du -xsh "$root" findmnt -T "$root" lsof +L1 2>/dev/null | grep -F -- "$root" ``` `lsof` 需要安装且通常需要 root 才能看全;命中时先确认 PID、文件归属和是否确实属于故障进程,再按该进程的正常轮转或重启流程处理。这个分支能解释“文件已经删了,空间却没回来”,不要直接删 Docker 数据目录。@silverriver · 2026/8/5 14:41:59
找到 10 条结果