|
本帖最后由 9zhmke 于 2024-6-19 16:00 编辑
在勤奋的狐狸波贴子里提到PrimoCache命令行配置(http://bbs.wuyou.net/forum.php?mod=viewthread&tid=434147)
刚好在之前也有批处理设置的想法,于是在fulibo的指引下越滑越远......
最先想到的就是按照自己的机器配置写个简单批处理:
- cd /d "C:\Program Files\PrimoCache"
- set disk=没找到盘
- for /f "tokens=2" %%i in ('rxpcc ls^|find "Vol"^|find "Level-2"') do set disk=%%i
- for /f "tokens=4" %%i in ('rxpcc ls^|find "%disk%"') do set disk=%%i
- echo 二级缓存是%disk%--{A340EFBD-5A9F-444A-B642-A42B5A9CD496}
- rxpcc new -v d -m 4096 -l %disk% -r 255,3 -w 20 -a average,freewritten,flushsleep,flushtoL2 -p=fromL2 -s
- rem D盘,内存4G,二级缓存3%写入,缓存时间20秒,均衡模式,待机刷入缓存,L1满时转L2,-p优先取L2,-s静默
- rxpcc new -v c -m 4096 -w INF -a average,freewritten,flushsleep -p=boot -s
- rem C盘,内存4G,缓存时间无限,均衡模式,待机刷入缓存,-p启动时开始,优先取L2,-s静默
复制代码
我和我推荐给周围朋友的配置,都是固态+机械。固态用于启动+二缓,通常128-512G,机械用于存储数据,通常0.5-18T。
大机械硬盘性价比高,很多家庭都有小孩从小到大的照片视频,收藏的歌曲视频电影、必备的软件什么的机械盘万一
有误操作,数据可恢复,固态就呵呵了。
配置不是重点,大家也不必拿这些考虑做讨论,主要想讨论的,是怎么配置PrimoCache更合理,以及简化配置的方法。诚
心地说,用各种语言和脚本,就没有比批处理更差的了,效率低不说,还容易出错。但是,批处理的即改即用和不要
求环境仍然使其生存了下来。本次探讨是以批处理为基础的命令行PrimoCache配置。由于自身经常下载各大论坛新出
的操作系统安装到自用实体机测试,重装系统太频繁,只好大量使用绿色软件,连最常用的静默安装软件们也要弄个
批处理方式来安装。PrimoCache是我的必装软件之一,每次手动设置时都在想要花点时间弄个自动设置方法出来。
后来发现,在帮同事装机时还得按不同的环境用不同的参数,于是写了个自动设置版初稿
以下批处理在Win10x64中文版下调试,不确定能英文版或磁盘没有卷标的电脑上正确运行,仅做技术讨论,
内有删除分区的操作,数据重要的电脑请务必谨慎,数据掉了我也没办法负责任。
希望有探讨的同学共同完善
- @echo off
- setlocal enabledelayedexpansion
- echo 还要多测试,比如卷标为空时,取分区空间位置是否正确等
- rem ..................检测机械和固态硬盘的数量..................
- set HDD_NUM=0&for /f %%i in ('powershell Get-PhysicalDisk^|find "HDD"') do set HDD=%%i && set /a HDD_NUM=!HDD_NUM! + 1
- set SSD_NUM=0&for /f %%i in ('powershell Get-PhysicalDisk^|find "SSD"') do set SSD=%%i && set /a SSD_NUM=!SSD_NUM! + 1
- if %SSD_NUM% gtr 1 echo 多于一只固态,请手动设置PrimoCache.& goto END
- rem ..................检测内存大小..................
- for /f "tokens=2*" %%i in ('systeminfo^|find "物理内存总量"') do set memory=%%i %%j
- if not "%memory:~-2%"=="MB" set msg3=内存大小超出认知,程序无法正确判断应该怎么设缓存.
- rem 去除最后两位,去除中间的逗号
- set memory=%memory:~0,-2%
- set /a memory=%memory:,=% /1000
- if %memory% lss 8 echo 内存太小,还是不使用缓存程序好些.& goto END
- if %memory% lss 16 if %memory% gtr 15 set mem=4096
- if %memory% lss 13 set mem=2048
- if %memory% gtr 15 set mem=4096
- echo 内存%memory%G,应设置缓存为%mem%。机械硬盘%HDD_NUM%只位于硬盘排序%HDD%,固态硬盘%SSD_NUM%只位于硬盘排序%SSD%。
- rem ..................检测PrimoCache程序..................
- cd /d "C:\Program Files\PrimoCache"
- if not exist rxpcc.exe echo 没有找到PrimoCache,现在退出.& goto END
- rem ..................检测机械和固态硬盘的分区..................
- :SSD_All_Drv
- if not %SSD_NUM%==1 goto SSD_NUM_END
- ( echo.select disk %SSD%
- echo.detail disk
- )|diskpart|find "磁盘分区">%tmp%\diskpart.txt
- set SSD_All_Drv=
- for /f "tokens=3*" %%i in (%tmp%\diskpart.txt) do (
- call :str_len "%%i"
- if "!str_len!"=="1" set SSD_All_Drv=!SSD_All_Drv!%%i
- rem echo i=%%i,len=!str_len!,SSD_All_Drv=!SSD_All_Drv!
- )
- echo 固态硬盘分区驱动器号是:%SSD_All_Drv%
- :SSD_NUM_END
- :HDD_All_Drv
- if not %HDD_NUM%==1 goto HDD_NUM_END
- ( echo.select disk %HDD%
- echo.detail disk
- )|diskpart|find "磁盘分区">%tmp%\diskpart.txt
- set HDD_All_Drv=
- for /f "tokens=3*" %%i in (%tmp%\diskpart.txt) do (
- call :str_len "%%i"
- if "!str_len!"=="1" set HDD_All_Drv=!HDD_All_Drv!%%i
- rem echo i=%%i,len=!str_len!,HDD_All_Drv=!HDD_All_Drv!
- )
- echo 机械硬盘分区驱动器号是:%HDD_All_Drv%
- :HDD_NUM_END
- set /a All_Drv_num=%SSD_NUM% + %HDD_NUM%
- set All_Drv=%SSD_NUM%%HDD_NUM%
- echo 所有硬盘分区驱动器号是:%All_Drv%
- rem ..................检测引导磁盘..................
- for /f "tokens=2" %%i in ('echo list vol ^|diskpart^|find "启动"') do set boot_vol=%%i
- ( echo.select vol %boot_vol%
- echo.list disk
- )|diskpart|find "*">%tmp%\diskpart.txt
- for /f "tokens=3,4" %%i in (%tmp%\diskpart.txt) do if "%%j"=="联机" set boot_disk=%%i
- echo 硬盘卷%boot_vol%作为启动盘,属于硬盘%boot_disk%
- if %All_Drv_num%==1 goto ONE_HDD
- if %SSD_NUM%==1 if %HDD_NUM% gtr 0 goto ONE_SSD_HDD
- echo 固态硬盘%SSD_NUM%只,机械硬盘%HDD_NUM%只,不知道怎么配置才好,请手工处理...
- goto END
- :ONE_HDD
- rem ..................单硬盘模式..................
- if not %All_Drv_num%==1 goto ONE_HDD_END
- rxpcc new -v %All_Drv% -m %mem% -w INF -a average,freewritten,flushsleep -p=boot -s
- echo %All_Drv%盘,内存%mem%,缓存时间无限,均衡模式,待机刷入缓存,-p启动时开始,优先取L2,-s静默
- echo 设置完成
- :ONE_HDD_END
- goto END
- :ONE_SSD_HDD
- rem ..................硬盘:一固态一机械或多机械..................
- ( echo.select disk %SSD%
- echo.detail disk
- )|diskpart|find "磁盘分区">%tmp%\diskpart.txt
- set size=0
- for /f "tokens=2,4,5" %%i in (%tmp%\diskpart.txt) do if "%%k"=="GB" set part=%%i && set size=%%j
- del %tmp%\diskpart.txt
- echo 第1次找出第%part%分区空间为%size%
- if not "%size%"=="0" goto SIZE_NEXT
- ( echo.select disk %SSD%
- echo.list partition
- )|diskpart|find "RAW">%tmp%\diskpart.txt
- set size=0
- for /f "tokens=2,4,5" %%i in (%tmp%\diskpart.txt) do if "%%k"=="GB" set part=%%i && set size=%%j
- del %tmp%\diskpart.txt
- echo 第2次找出第%part%分区空间为%size%
- if not "%size%"=="0" goto SIZE_NEXT
- ( echo.select disk %SSD%
- echo.list partition
- )|diskpart|find "分区">%tmp%\diskpart.txt
- for /f "tokens=2,4,5" %%i in (%tmp%\diskpart.txt) do if "%%k"=="GB" set part=%%i && set size=%%j
- echo 第3次找出第%part%分区空间为%size%
- :SIZE_NEXT
- set /a size=%size% + 0
- if %size% gtr 200 echo SSD二级缓不对,是%size%GB&goto END
- if %size% lss 2 echo SSD二级缓不对,是%size%GB&goto END
- echo 上面过程已找到未知分区(二级缓存)空间,这个空间按约定,由第一次使用时手工建立在磁盘空间最末尾
- echo ..................找到固态硬盘是第%SSD%只,二级缓存是其%part%分区%size%GB,下面删除未识别卷后新建..................
- ( echo.select disk %SSD%
- echo.select partition %part%
- echo.delete part
- echo.creat part primary
- echo.list partition
- )|diskpart
- echo ..................找最大的卷号,并格式化成二级缓存..................
- set max_vol=0
- for /f "tokens=2" %%i in ('rxpcc ls^|find "Local Volume"') do (
- set num=%%i
- set num=!num:~1,2!
- if !num! lss 0 set num=0
- if !num! gtr 66 set num=0
- if !num! gtr !max_vol! set max_vol=!num!
- rem echo 原始数据“%%i”,NUM=!num!,MAX=!max_vol!
- )
- echo 最大的卷号是!max_vol!
- if "!max_vol!"=="0" goto echo 二级卷没找到,最大的卷号%max_vol%...goto END
- rxpcc storage format -v %max_vol% -s
- echo ..................找二级缓存盘,并正式建立缓存..................
- set disk=没找到盘
- for /f "tokens=2" %%i in ('rxpcc ls^|find "Vol"^|find "Level-2"') do set disk=%%i&set free=%j
- set free=%free:~0,-2%
- for /f "tokens=4" %%i in ('rxpcc ls^|find "%disk%"') do set disk=%%i
- echo 硬盘%SSD%是%size%G大小,二级缓存是%disk%--类似{A340EFBD-5A9F-444A-B642-A42B5A9CD496}
- if "%disk%"=="没找到盘" echo 没有找到固态硬盘上的二级缓存盘,也没有找到足够剩余空间,请手工建立...&goto END
- echo CREAT:rxpcc new -v %HDD_All_Drv% -m %mem% -l %disk% -r 255,3 -w 20 -a average,freewritten,flushsleep,flushtoL2 -p=fromL2 -s
- rxpcc new -v %HDD_All_Drv% -m %mem% -l %disk% -r 255,3 -w 20 -a average,freewritten,flushsleep,flushtoL2 -p=fromL2 -s
- echo 参数解释%HDD_All_Drv%盘,内存4G,二级缓存3%写入,缓存时间20秒,均衡模式,待机刷入缓存,L1满时转L2,-p优先取L2,-s静默
- echo.
- echo 准备建立:rxpcc new -v %HDD_All_Drv% -m %mem% -w INF -a average,freewritten,flushsleep -p=boot -s
- rxpcc new -v %SSD_All_Drv% -m %mem% -w INF -a average,freewritten,flushsleep -p=boot -s
- echo %SSD_All_Drv%盘,内存4G,缓存时间无限,均衡模式,待机刷入缓存,-p启动时开始,优先取L2,-s静默
- goto END
- rem ..................字符串长度检测子函数..................
- :str_len
- set "str_len_string=%~1"
- rem echo 接收到%str_len_string%
- set str_len=0
- :str_len_loop
- set str_len_string=%str_len_string:~0,-1%
- set /a str_len+=1
- if not "%str_len_string%"=="" (goto str_len_loop)
- rem echo 字符串长度为: %str_len%
- exit /b
- :END
- echo del /f /q "%~dpnx0"
- echo y|del /f /q "%~dpnx0"
- echo 按任意键退出
- timeout 12
复制代码
|
评分
-
查看全部评分
|