我有一个 FFmpeg 命令来修剪音频:
ffmpeg -ss 01:43:46 -t 00:00:44.30 -i input.mp3 output.mp3
Run Code Online (Sandbox Code Playgroud)
我使用此命令的问题是该选项-t需要从01:43:46 开始的持续时间(以秒为单位)。我想使用开始/停止时间修剪音频,例如在01:43:46和00:01:45.02 之间。
这可能吗?
有不同的来源,建议采用不同的做法。我发现以下建议应该多久运行一次 fstrim。
什么是最佳选择,为什么?Ubuntu 14.04 默认使用第一个选项。
我尝试按照本教程在 ubuntu 13.04 上使用 LVM 和 dm-crypt 设置 TRIM:
请参阅下面有关我的配置和测试程序的说明。
如果 TRIM 工作正常,是否有可靠的测试?
是我的测试程序错误还是我的 TRIM 不起作用?
如果它不起作用:我的设置有什么问题?
如何为我的设置调试 TRIM 并使 TRIM 工作?
这是我的配置:
cat /etc/crypttab
sda3_crypt UUID=[...] none luks,discard
Run Code Online (Sandbox Code Playgroud)
和
cat /etc/lvm/lvm.conf
# [...]
devices {
# [ ... ]
issue_discards = 1
# [ ... ]
}
# [...]
Run Code Online (Sandbox Code Playgroud)
SSD 是三星 840 Pro。
为了测试我刚刚做的设置sudo fstrim -v /,结果
/: [...] bytes were trimmed
再次执行此操作的结果/: 0 bytes were trimmed似乎是有道理的,并表明 TRIM 似乎有效。
但是后来我做了这个测试:
dd …
我有一个文件,在文件的开头和结尾都有垃圾(二进制页眉和页脚)。我想知道如何核对这些字节。例如,让我们假设从一开始就有 25 个字节。并且,距离末尾有 2 个字节。
我知道我可以使用 truncate 和 dd,但是 truncate 不适用于流,而且在硬文件上运行两个命令似乎有点笨拙。如果truncate知道文件有多大,可以将文件转换为dd. 或者,如果有更好的方法来做到这一点?
我有一个luksOpen的LUKS分区:/dev/sda1--allow-discards
cryptsetup --allow-discards luksOpen /dev/sda1 root
Run Code Online (Sandbox Code Playgroud)
然后我ext4使用discard选项挂载文件系统:
grep /dev/mapper/root /proc/mounts
/dev/mapper/root / ext4 ro,relatime,block_validity,discard,delalloc,barrier,user_xattr,acl 0 0
Run Code Online (Sandbox Code Playgroud)
然后我修剪已安装分区上的可用空间:
fstrim -v /
Run Code Online (Sandbox Code Playgroud)
有df,我看到/有80%的可用空间。这意味着在 上/dev/sda1,磁盘的 80% 是二进制零。
如果我克隆图像 cat
cat /dev/sda1 > sda1.img
Run Code Online (Sandbox Code Playgroud)
并使用 压缩图像xz,我希望磁盘上的所有零都被压缩。由于磁盘上 20% 的数据是加密的,因此它看起来应该是随机的并且是不可压缩的。因此,xz 压缩的图像应该是近似的。原始尺寸的 20%。
但是,生成的 xz 压缩图像与原始原始图像的大小大致相同。
我的推理正确吗?
为什么我的理论没有转化为实践?
我有一个带有几个 ext4 分区的驱动器(SD 卡),但还有一些未分配的空间。该fstrim实用程序只能在文件系统中工作。在我重新发明轮子并编写一个之前,是否有另一种实用程序可以修剪未分配的空间(或者可以修剪明确指定的范围)?
我可以验证控制器当前不知道设备上的大部分未分配空间是否可用,正如我观察到的那样,在这张特定的卡上,读取到修剪过的空间返回 0,但设备的扫描显示留下了大量的垃圾数据。
编辑:我在使用hdparm. 下面的示例丢弃了第一个扇区,但无论我指定的范围如何,我都会看到相同的结果。fstrim设备上没有问题:
root@ubuntu:~# hdparm --please-destroy-my-drive --trim-sector-ranges 0:1 --verbose /dev/mmcblk0
/dev/mmcblk0:
trimming 1 sectors from 1 ranges
outgoing cdb: 85 0d 06 00 01 00 01 00 00 00 00 00 00 40 06 00
outgoing_data:
00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …Run Code Online (Sandbox Code Playgroud) fstrim需要挂载Linux块设备,而且不是很冗长。blkdiscard可以看出,但这也需要写操作。
我能否以某种方式判断块设备是否支持修剪/丢弃,而不实际尝试修剪/丢弃其上的某些内容?
标准的全新 linux(确切地说是 Ubuntu 11.10)会安装并重新格式化(完整)我的 SSD,还是我需要做一些额外的事情?
我知道当我指定discard选项时,ext4 会在擦除时修剪块,但如果可能的话,我想从完全修剪过的驱动器开始。
当我安装我的 SSD 时,我只是安装了discard它,并没有出汗。然而,今天我正在阅读有关使用它的利弊的信息,fstrim并决定运行该程序以了解实际需要多长时间(仍然使用 安装我的分区discard)。该命令在我的根分区和主分区上都花费了几分钟。对于我的主分区,我使用-v并得到了这个:
$ sudo fstrim -v /home
/home: 137494052864 bytes were trimmed
Run Code Online (Sandbox Code Playgroud)
这比分区上的可用空间量还多!
$ df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 206G 78G 118G 40% /home
Run Code Online (Sandbox Code Playgroud)
随后的运行在不到一秒的时间内完成,例如:
$ sudo fstrim -v /home
/home: 0 bytes were trimmed
Run Code Online (Sandbox Code Playgroud)
当然,如果我一直用 挂载分区discard,fstrim不应该像这样修剪大量数据吗?该discard选项肯定已启用,以下是相关fstab行:
UUID=xxxxxxxx... / ext4 noatime,discard,errors=remount-ro 0 1
UUID=xxxxxxxx... /home ext4 noatime,discard,errors=remount-ro 0 2
Run Code Online (Sandbox Code Playgroud)
和mount输出行:
/dev/disk/by-uuid/xxxxxxxx... on / type …Run Code Online (Sandbox Code Playgroud) 我正在使用 Linux 服务器,想知道是否有办法可以确定我的 SSD 是否支持 fstrim。我尝试过hdparm -I /dev/sda,但它不可用,我无法安装它。我还有其他方法可以做到吗?任何帮助表示赞赏。谢谢!
我也很想知道如果我在不支持修剪的设备上运行 fstrim 会发生什么?它会导致无操作吗?