我有一个数据文件,内容如下:
department: customer service section: A
department: marketing section: A
department: finance section: A
Run Code Online (Sandbox Code Playgroud)
当我阅读每一行时,我会使用cut命令提取部门名称。不幸的是,程序会自动trim将多余的空间全部删除,因此我错误地剪切了部门名称。
cat dept.dat | while read line
do
echo $line
echo $line | cut -c 12-29
done
Run Code Online (Sandbox Code Playgroud)
例如原始行是:
department: marketing section: A
Run Code Online (Sandbox Code Playgroud)
虽然程序将此行视为:
department: marketing section: A
Run Code Online (Sandbox Code Playgroud)
如何在不修剪所有冗余空间的情况下读取该行?
我需要在一个 SSD 和一个 HDD 上配置 RAID-1。SSD 和 HDD 都有一些我不需要的预装软件,因此如果有任何优势,它们都可以完全擦除。
到目前为止,我的研究使我找到了这个--write-mostly选项,我知道我应该在 HDD 上使用它,以便读取操作可以获得 SSD 的全速。
但是我不清楚如何确保正确使用 TRIM 命令。
我在设置期间阅读了有关 mdadm 写入设备每个扇区的警告,无论在设置突袭之前执行了任何 TRIM,SSD 都没有备用扇区。
我最好先创建以 SSD 作为唯一设备而降级的 RAID,然后添加 HDD,以便只有 HDD 被写入?
在设置 RAID 之前,我需要对 SSD 做什么,以便执行任何需要的 TRIM?SSD 预装了软件(我不需要),这意味着我不知道以前写入了哪些扇区。
如果有任何相关性,SSD 是 128GB,并且在SAMSUNG MZ7LF128HCP-00000, FXT0101Qata 层和SAMSUNG MZ7LF128 101Q PQsd 层提到的 dmesg 输出中。
我已将 LVM 设置为在 SSD 的分区上缓存逻辑卷(位于 HDD 上)(如果这很重要,则处于回写模式)。据我所知,这可以正常工作并且缓存使用了所有可用空间。
现在,我想知道此设置是否向 SSD 发出 TRIM 命令,以及是否需要(或合理)发出此类命令来延长 SSD 的使用寿命。我已添加discard到/etc/fstab缓存逻辑卷条目的选项中。但是,我不知道这如何影响缓存分区,也不知道如何测试是否发出 TRIM 命令。
我想知道是否使用该选项安装SSD discard(记录在man mount才能将 ATA TRIM 发送到 SSD 的控制器。
证据有点间接:我是否在SanDisk SSD PLUSdiscard上安装分区安装分区,删除的文件都无法通过删除后立即运行 TestDisk 来恢复。文件路径完好无损,但文件内容消失了。由此我怀疑 TRIM 在 SSD 上运行并导致文件内容无法恢复。
看了一下systemctl list-timers,好像没有一个单元在运行fstrim。
尽管分区没有挂载,但文件删除后内核是否发送TRIMdiscard?或者这是 TestDisk 无法可靠地从 SSD 恢复文件的另一个原因?
我使用的是 Arch Linux 5.12.3。
\nfindmnt告诉我有关分区及其安装选项的信息:
TARGET SOURCE FSTYPE OPTIONS\n/ /dev/sda3 ext4 rw,relatime\n\xe2\x94\x94\xe2\x94\x80/sda1 /dev/sda1 ext4 rw,relatime,lazytime,discard\nRun Code Online (Sandbox Code Playgroud)\n 我的新笔记本中有一个新的三星 ssd。我调整了所有内容以避免写入磁盘(firefox 配置文件和/var/log内存中),我正在使用ext4fsrelatime并且我fstrim每天使用一次来修剪我的 ssd。
我用iostat -dhm. 运行前fstrim的命令iostat所示
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda
4.97 0.05 0.59 1856 20924
Run Code Online (Sandbox Code Playgroud)
修剪后 /home
# fstrim -v /home
/home: 100.2 GiB (107555401728 bytes) trimmed
Run Code Online (Sandbox Code Playgroud)
ìostat 显示
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda
5.91 0.05 3.51 1859 123498
Run Code Online (Sandbox Code Playgroud)
MB_wrtn增加了102574 MB。这是否意味着fstrim正在写入102574 MB = 100.2 GB我的磁盘?
Trim 应该“标记”不包含有效数据的页面,而不是写入它们。
我想iostat看到了fstrim作为写作的操作(即使它不是 …
我有一个 1400x1400 的图像,我想在其中向左修剪 4 个像素,在底部修剪 1 个像素,为了保持方形比例,从顶部修剪 3 个像素。问题是,每当我使用 进行裁剪时jpegtran,无论我做什么,都会从右下角删除像素。例如,仅测试左侧部分,我尝试过:
jpegtran -perfect -crop 1396x1400+0+0 -outfile crop.jpg image.jpg
Run Code Online (Sandbox Code Playgroud)
但这只是从右侧删除了 4 个像素;
jpegtran -perfect -crop 1396x1400-4+0 -outfile crop.jpg image.jpg
Run Code Online (Sandbox Code Playgroud)
这再次从右侧删除了 4 个像素;
jpegtran -perfect -crop 1396x1400+4+0 -outfile crop.jpg image.jpg
Run Code Online (Sandbox Code Playgroud)
并且根本不会删除任何像素;更一般地说,
jpegtran -perfect -crop 1396x1400+x+0 -outfile crop.jpg image.jpg
jpegtran -perfect -crop 1396x1400-x+0 -outfile crop.jpg image.jpg
Run Code Online (Sandbox Code Playgroud)
用x0和4之间,不会分别取出从右侧4-x和x个象素。凭借x高于5,显然给出了一个错误。我无法实现任何左修剪。谁能帮我?
我使用的是jpegtran从libjpeg-turbo一个Arch Linux的x86_64的系统版本1.4.2(编译20151205)。
我在带有三星 PM851 SSD 的戴尔 XPS 9343 上安装了 Linux。
我最近读到许多 SSD 不支持 TRIM 操作。
所以我想检查discard选项是否在我的系统上有效。
第一步,我尝试简单地运行sudo fstrim --verbose --all并报告41GB trimmed;这让我感到害怕,因为我一直期待一个很小的价值,因为我一直启用 TRIM(见上文);事实上,如果我再次重新运行该命令,我会得到O bytes trimmed. 正常吗? 即使我在 /etc/fstab 中有丢弃选项?
PS:我尝试遵循此处提出的解决方案,但由于trim.test: FIBMAP unsupported.
PS2:它是带有 GPT 和 EXT4 文件系统的平面SSD(无 LVM 或 RAID)
我无法在新安装的 SSD 上启用 TRIM。Ubuntu Server 12.04,Linux 3.11.0-15-generic。我通过 /etc/fstab 中的丢弃设置打开了 TRIM。TRIM 也不适用于 fstrim 命令。
以下是我检查 TRIM 是否有效的方法:
#for i in {1..100000}; do echo "1" >> tempfile; done
#sudo hdparm --fibmap tempfile
#sudo hdparm --read-sector 293865512 /dev/sda
#rm tempfile
#sync
#sudo hdparm --read-sector 293865512 /dev/sda
Run Code Online (Sandbox Code Playgroud)
在启用 TRIM 的情况下,hdparm --read-sector 命令的第二次运行应返回零,但结果与该命令的第一次运行相同。
fstrim 命令不起作用:
#sudo fstrim -v /
/: 0 bytes were trimmed
Run Code Online (Sandbox Code Playgroud)
这是 hdparm -i /dev/sda 的结果:
Model=KINGSTON SV300S37A240G, FwRev=520ABBF0, SerialNo=50026B7243004D3E
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 …Run Code Online (Sandbox Code Playgroud) 对于 SSD,我可以打开行设备并使用ioctl()withBLKDISCARD命令丢弃一系列页面。
我的问题是
对于打开的文件,如何丢弃一系列数据?这是否取决于底层文件系统的实现?