【星海出品】Linux大文件处理

2024-06-14 16:04
文章标签 linux 处理 星海 出品

本文主要是介绍【星海出品】Linux大文件处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在未生成大文件之前最好使用专门的日志管理工具(如logrotate)来管理日志文件的滚动和备份。这些工具通常具有更好的性能和更高的可靠性。

文件可以同时被写入和读取,在并发读写同一个文件时,可能会遇到性能瓶颈或竞争条件

用户 -> 内存 -> 缓存 -> 文件
用户态于内核态的转换可以参考:
https://blog.csdn.net/weixin_41997073/article/details/135266386


在大文件的处理前,最好先进行大的 I/O 处理。

测试写入性能:
time dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
测试读取性能:
time dd if=testfile of=/dev/null bs=1G count=1 iflag=direct

dd命令完成后会显示所用的时间和传输速率(如MB/s)。


dd 命令可以用来备份大的文件,但最好是没有程序在持续写入。

dd if=<source_file> of=<target_file>

如果没有空间的话,可以先通过 mount 挂载过来一个空间区域,进行备份。

dd命令理论上可以备份正在被写入的日志文件的前半部分
dd命令是一个底层工具,用于直接复制数据块。在备份正在被写入的文件时,由于文件内容的变化,dd命令可能需要多次尝试读取同一个数据块,这会降低备份的效率和性能。


然而如果想要只拷贝一半文件,需要进行前置操作比较多

1.首先查看磁盘的字节数

ls -l filename | awk '{print $5}'
du -b filename

注意:此处最好以 du 查看为准,因为 du 是以占据的 block 为基础进行计算的,和 dd 以 block 为单位备份一致。

total_bytes=1000000  # 文件的总字节数  
bytes_to_backup=500000  # 要备份的字节数  
block_size=4096  # 块大小,例如4k  
count=$((bytes_to_backup / block_size + (bytes_to_backup % block_size > 0 ? 1 : 0)))  
dd if=filename of=filename_half.backup bs=$block_size count=$count

备份后要使用 md5sum 进行验证

md5sum <file>head -c 500000 filename | md5sum  
md5sum filename_half.backup  

假设你有一个名为 logfile.log 的正在写入的日志文件,你想要备份它到另一个目录 /backup/:
可以使用另一个工具进行备份

rsync -avz /path/to/logfile.log /backup/

该工具的优点是支持增量备份。

rsync -avz --delete --ignore-errors /var/log/ /backup/

如果你想要定期运行备份,并且只备份自上次备份以来更改过的文件,你可以使用 --delete 选项(小心使用,因为它会删除目标目录中源目录中不存在的文件)和 --ignore-errors 选项(防止由于某些文件无法读取而导致的整个备份失败):


正在被写入的大文件可以使用 logrotate 进行处理
如果日志文件正在被写入,logrotate 会使用 copytruncate 选项(或类似的机制)来确保数据的一致性。
这通常意味着它会先复制日志文件到一个新的位置,然后清空原始文件以开始新的日志记录。由于复制和清空之间有一个时间差,可能会丢失部分日志数据,但通常这是一个可以接受的风险,因为 logrotate 设计的初衷就是为了管理大量的日志文件。

如果你不希望丢失任何数据,可以考虑使用 delaycompress 选项来延迟压缩操作,直到下一次轮转周期。

在配置文件中使用 postrotate 和 endscript 部分来定义在转储后需要执行的命令,比如重新加载应用程序或服务以使用新的日志文件。

/var/log/myapp.log {  daily  rotate 7  compress  delaycompress  missingok  notifempty  create 0640 www-data adm  sharedscripts  postrotate  /usr/bin/systemctl reload myapp.service > /dev/null  endscript  
}

这篇关于【星海出品】Linux大文件处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060869

相关文章

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件