您如何看待生产环境中的 ext4 文件系统?我们非常接近启动我们的项目,该项目将使用数千万经常更新的非大文件,我们需要决定使用哪个 FS。
有一段时间我们对其他 linux FS 的考虑是:
当我创建 ext4 文件系统时,有许多“功能”,我可以启用和禁用 - 比如 has_journal、extent、huge_file 等等。有什么方法可以知道在创建 ext4 文件系统时使用了哪些选项(我的意思是在创建之后)?
我已经存在 ext4 分区(由某人创建),但甚至不知道,它是否使用了日志或范围。
似乎 fsck.ext4 很快就退出了,我猜它只会检查日志日志,如果日志是干净的,则什么都不做。是吗?如何强制它检查整个文件系统?我试过这个-f选项,但它再次退出说它很快就干净了。
我注意到e安装在 ext4 文件系统上的 Linux 机器上的几个文件/目录的属性。
[kelly@p2820887.pubip.serverbeach.com ~]$ lsattr -d /bin
-------------e- /bin
Run Code Online (Sandbox Code Playgroud)
根据chattr(1):
'e' 属性表示该文件正在使用范围来映射磁盘上的块。不能使用 chattr(1) 删除它。
这有什么不同,更重要的是,这个细节在什么方面很重要——特别是为什么这个细节足够重要以作为文件属性报告?在什么情况下我应该根据这个文件“正在使用范围来映射磁盘上的块”的知识来改变我的行为?想必这是我需要知道的,不然也不会说的这么明显吧?
我有一个只有 128MB RAM 的小型嵌入式设备
连接到此设备的是一个 2TB USB2 硬盘
直到最近,当文件数量超过阈值时,我对设备的性能感到非常满意,磁盘容量超过了阈值(我不确定是哪个)
磁盘上有许多小文件,由于写入应用程序的性质,文件以非常平衡的方式组织- 没有叶节点目录有超过 200 个文件,而只有 800,000 个文件。
我希望得到一些调查的线索。磁盘性能显着下降,设备运行良好,然后突然性能像石头一样下降。
我的假设是我在磁盘上为我的文件选择的组织结构在某种程度上损害了 inode 缓存保持 zippy 的能力。
作为实验,我卸载了磁盘(刷新缓存,免费验证)。然后从命令提示符我深入到目录结构。总而言之,这个目录(及其子目录)下只有大约 3200 个文件,此时“空闲”显示 >117MB 的可用内存
在这一点上,我输入命令'find',然后是'free'
'find' 显示大约 3000 个文件,但内存使用量从 ~117MB 到 ~2MB
我了解缓存与可用内存之间的平衡,以及内核如何将空页面视为坏页面——但是,来自 3000 个文件的目录中的 115MB 缓存内容表明我的理解存在严重差距。我希望有人能帮助我了解发生了什么
我可以假设平衡树是拥有大量文件的方法吗?
我使用角色为 Hyper-V 的 Windows Server 2008r2。来宾系统是 Ubuntu 12.04 LTC。它位于动态虚拟硬盘上。
我想压缩这个 VHD(磁盘上的实际大小是 50 GB,360 GB)。但我不能这样做,因为 Ubuntu 文件系统不是 NTFS。 我需要什么(gparted,sdelete,...)来解决这个问题?
主要问题是文件系统不是NTFS,而是ext4。
答案:
1) 下载systemrescuecd
2) 将此 .iso 添加到 quest OS Ubuntu
3)启动这个虚拟机
4)使用zerofree
zerofree /dev/sda1
Run Code Online (Sandbox Code Playgroud)
5) 关闭这个虚拟机
6) 使用 Hyper-V 管理器(编辑 -> 碎片整理)
这个 vhd 是 360 Gb。现在 70 GB。
我有一个带有 8x10TB HDD 的 Ubuntu 16.04 备份服务器,通过 SATA 3.0 背板。8 个硬盘组装成 RAID6,正在使用 EXT4 文件系统。该文件系统存储了大量具有大量 SEEK 操作但 IO 吞吐量较低的小文件。事实上,每天都有许多来自不同服务器的小文件通过 rsnapshot 获取快照(多个 INODES 直接指向同一个文件。由于文件系统(60TB 网络)超过 50% 的使用率,我的性能非常差。目前,使用率为 75% 并且
du -sch /backup-root/
Run Code Online (Sandbox Code Playgroud)
需要几天(!)。机器有8核和16G内存。RAM 完全由 OS 文件系统缓存使用,由于 IOWAIT,8 个内核中的 7 个内核始终处于空闲状态。
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 5af205b0-d622-41dd-990e-b4d660c12bd9
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: …Run Code Online (Sandbox Code Playgroud) 我目前的任务是将现有服务器提升到(至少更高)专业标准——尽可能减少对最终用户的干扰。为了进行适当的回滚,我需要备份现有服务器的根 fs,它当前是主磁盘分区内的 ext4 - 而不是 LVM,这将使整个显示仅仅是手指练习。我想避免关闭服务器。
在这种情况下甚至可能吗?
我们的 ext4 文件系统上的一个大文件可能在中间发现了一个坏块。将文件复制到另一个驱动器会导致部分输入/输出错误。不过,坏道以外的数据似乎还可以。
我们没有这个文件的备份,因为它是最近创建的,所以我正在寻找一种方法来复制文件的整个可读部分,同时跳过坏扇区。
我读过其他网站,这些网站建议使用坏块恢复整个硬盘驱动器的方法,但他们并没有说明如何恢复跨越坏块的任何文件。
谢谢。
我的 inode 快用完了。只有11%可用:
the-foo:~ # df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/system-home 9830400 8702297 1128103 89% /home
Run Code Online (Sandbox Code Playgroud)
有没有办法在不创建和复制到新分区的情况下解决这个问题?
细节:
the-foo:~ # tune2fs -l /dev/mapper/system-home
tune2fs 1.42.6 (21-Sep-2012)
Filesystem volume name: <none>
Last mounted on: /home
Filesystem UUID: 55899b65-15af-437d-ac56-d323c702f305
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors …Run Code Online (Sandbox Code Playgroud) ext4 ×10
linux ×6
filesystems ×5
attributes ×1
backup ×1
fsck ×1
hyper-v ×1
inode ×1
mkfs ×1
ntfs ×1
snapshot ×1
ubuntu-16.04 ×1
zero-fill ×1