我想知道是否有可能使用Windows和c ++来获取大型视频文件(长度为几千兆字节)并"就地"删除它的第一个和最后几百兆字节.
将有用数据复制到新文件的传统方法通常需要超过20分钟的看似不必要的复制.
有没有什么聪明可以用磁盘做低级别来实现这一点?
有时当我启动我的java应用程序时,logback拒绝向我的日志文件写入任何内容.有时它也拒绝在午夜(或午夜之后的第一个日志记录事件)滚动日志文件,这导致日志记录事件丢失到空白.当我在logbacks无法滚动日志时查看我的主日志文件时,它将有23:59的时间,与昨天的日期一样,并且在此之后的任何和所有日志记录语句将无法挽回地丢失.我有一个相当简单的配置文件,看起来是正确的.它当然应该是正确的,因为它在大多数时间都有效.
这是我的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--See http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
<!--and http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy-->
<!--for further documentation-->
<append>true</append>
<File>aggregator.log</File>
<encoder>
<!-- was: %d{yyyy-MM-dd HH:mm:ss}%5p [%t] (%F:%L) - %msg%n -->
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] \(%class{25}:%line\) - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- By setting the name to .gz here, we get free compression. -->
<fileNamePattern>aggregator.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] \(%class{25}:%line\) - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="file"/>
<appender-ref ref="console"/>
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法可靠地重现此错误,因此调试它有点困难.有人能告诉我我做错了什么,或者其他可能是什么问题?如果它有任何帮助,我将STDOUT和STDERR重定向到/ dev/null(我在linux上运行,顺便说一句).
考虑具有以下特征的磁盘:
表面
数16 扇区数/圆柱
数4096 每个表面的磁道数2048
每个扇区的字节数512
1)磁盘有多少个模式?
我得到:曲面数/ 2 = 8
2)每钉多少个部门?
我得到:每个圆柱的轨道数=每个表面的轨道*曲面
= 2048 * 16 = 32,768
每个轨道的扇区数=每个圆柱的轨道数/每个圆柱的扇区数
= 32, 768 / 4096
= 8
Run Code Online (Sandbox Code Playgroud)
3)
我得到的此磁盘的总大小是多少:总大小=圆柱体*表面*每磁道扇区* 512字节
= 32,768 * 16 * 8 * 512
= 2, 147, 483, 648 bytes
= 2, 097, 152 Mb
= 2, 048 Gb
Run Code Online (Sandbox Code Playgroud)
问题是,我不知道这是否是正确的解决方案
我有一个从THandleStream派生的简单类,我用它来编辑原始卷.我调用Windows createfile()函数来打开一个驱动器,但该函数永远不会返回一个有效的句柄,而是一个奇特的错误代码(在调试时间为348,在运行时为304,但是没有引发错误,这只是句柄值看起来很奇怪).这就是我正在做的事情:
Constructor TDiskStream.Create(Const aDrive: String);
Var
Hdl: Cardinal;
A,B: Int64;
Begin
Hdl := CreateFile( PChar(ADrive),
GENERIC_WRITE,
FILE_SHARE_READ Or FILE_SHARE_WRITE,
0, OPEN_EXISTING, 0, 0);
Inherited Create( Hdl );
GetDiskFreeSpaceEx( PChar( RightStr(ADrive,2) + '\'), A, FSize, @B );
End;
Run Code Online (Sandbox Code Playgroud)
句柄值与msdn上描述为ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING的错误代码匹配,但它似乎非常罕见.所述aDrive参数设置是否正确(在格式\\ \×: ).
这里有什么问题,我怎样才能设法获得有效的文件处理?
在Windows> = XP上使用Delphi 7,如何从计算机中检索每个磁盘的磁盘签名?最好不使用WMI或Diskpart。
如果可能的话,也要快一点。
谢谢。
以后编辑:
Documentation: http://pcsupport.about.com/od/termsd/g/disk-signature.htm
MBR disks: http://diddy.boot-land.net/firadisk/files/signature.htm
GPT disks: http://thestarman.pcministry.com/asm/mbr/GPT.htm
How to get it with DiskPart (method found on Google when searching "disk signature"):
Diskpart >> list disk >> select disk [n] >>
detail disk >> Disk ID: 0E35445B for MBR disks
and GUID: 55FD03F2-6B11-49DF-8167-D30B94A4509D for GPT Disks
Run Code Online (Sandbox Code Playgroud) 我正在开发一个高性能数据库,我想直接写入具有多个磁头的特定磁道/磁道.如何通过SATA总线在带有SATA磁盘的Linux中完成?您可以推荐哪些文档,示例?
我正在使用QDir::drives()驱动器列表.它在Windows上运行良好,但在Linux和Mac上它只返回单个项目"/",即root.这是预期的行为,但我怎样才能获得Mac和Linux上的驱动器列表?
非Qt原生API解决方案也受到欢迎.
关于"驱动器"定义的澄清:我想得到一个在Finder或Linux内置文件管理器中作为"驱动器"可见的挂载点列表.
我有一个10 TB的文件,里面有来自多本书的单词,我正在尝试grep一些不常见的字符串(没有正则表达式).例如:
grep "cappucino" filename
我想估计这需要多长时间.我不是真的在寻找它是否是正确的方法.当我打电话给grep时,我想了解更多关于幕后真正发生的事情.
如果我错了,请纠正我:
我使用机械硬盘驱动器,读取速度大约为200 MB/s,因此需要大约1000万/ 200 = 50000秒= 14小时才能完成.这是一个准确的估计吗?
背景:
我试图ubuntu在台式计算机上设置一台机器.整个过程耗费了一整天,包括安装操作系统和软件.不过,我并没有考虑太多.
然后我尝试使用新机器完成我的工作,它比我的笔记本电脑慢得多,这很奇怪.
我做了iotop,发现解压缩包时的磁盘流量大约是1-2MB/s,这肯定是不正常的.
然后,经过数小时的研究,我发现这篇文章描述了完全相同的问题,并提供了一个丑陋的解决方案:
我们最近在一些系统上遇到了一个主要的性能问题,其中磁盘写入速度非常慢(~1 MB/s - 正常性能为150 + MB/s).
...
编辑:解决这个问题,要么删除足够的RAM,要么添加"mem = 8G"作为内核启动参数(例如在Ubuntu上的/ etc/default/grub中 - 不要忘记运行update-grub!)
我也看过这篇文章
https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/
并做到了
cat /proc/vmstat | egrep "dirty|writeback"
Run Code Online (Sandbox Code Playgroud)
输出是:
nr_dirty 10
nr_writeback 0
nr_writeback_temp 0
nr_dirty_threshold 0 // and here
nr_dirty_background_threshold 0 // here
Run Code Online (Sandbox Code Playgroud)
这些值是8223和4111何时mem=8g设置.
因此,它基本上显示当系统内存大于8GB(在我的情况下为32GB)时,无论vm.dirty_background_ratio和vm.dirty_ratio设置如何(在我的情况下为 5%和10%),实际的脏阈值变为0并且写入缓冲区被禁用?
为什么会这样?
这是内核中还是其他地方的错误?
除了拔掉RAM或使用"mem = 8g"之外,还有解决方案吗?
更新:我正在使用32位的ubuntu 12.04运行3.13.0-53通用内核,所以这可能只发生在32位系统上.
由于某些启动顺序问题,我在Google Compute Engine上的实例无法启动。
因此,我创建了另一个实例并重新配置了我的机器。
我的问题:
日志
[0.348577]密钥类型可信注册
[0.349232]密钥类型已加密注册
[0.349769] AppArmor:启用了AppArmor sha1策略哈希
[0.350351] ima:未找到TPM芯片,正在激活TPM旁路!
[0.351070] EVM:HMAC属性:0x1
[0.351549]幻数:11:333:138
[0.352077]块ram3:哈希匹配
[0.352550] rtc_cmos 00:00:将系统时钟设置为2015-12-19 17:06:53 UTC(1450544813)
[0.353492] BIOS EDD设备v0.16 2004年6月25日,找到0个设备
[0.354108] EDD信息不可用。
[0.536267]输入:AT Translated Set 2键盘为/ devices / platform / i8042 / serio0 / input / input2
[0.537862] md:在自动检测之前,等待所有设备可用
[0.538979] md:如果您不使用raid,请使用raid = noautodetect
[0.539969] md:自动检测RAID阵列。
[0.540699] md:已扫描0,并添加了0个设备。
[0.541565] md:自动运行...
[0.542093] md:...自动运行完成。
[0.542723] VFS:无法打开根设备“ sda1”或未知块(0,0):错误-6
[0.543731]请附加正确的“ root =”引导选项;这是可用的分区:
[0.545011]内核崩溃-不同步:VFS:无法在未知块(0,0)上安装根fs
[0.546199] CPU:0 PID:1 Comm:swapper / 0未污染3.19.0-39-generic#44〜14.04.1-Ubuntu
[0.547579]硬件名称:Google Google,BIOS Google 01/01/2011
[0.548728] ffffea00008ae140 ffff880024ee7db8 ffffffff817af92b …