TSM中要注意的4个参数,没理解的话就害人不浅啊(转)

verexists:指定当前在客户机文件系统中的文件所保留的最大备份版本数,如果某个备份操作超过了限制,
           则服务器使磁带库中最旧的备份版本到期。(即代表文件系统中有的文件在磁带库中保留的版本数)
           版本数既文件的个数,比如verexists=2 ,则有文件/backup/file1,第一次备份保留一个版本,
           第二次备份,又会重新备份一次,同一个文件总共2个版本,但可能文件内容不一样了(因为文件被修改了)。
           如果verexists=1,则第二次备份时,就会将第一次备份的文件删除掉,保留第二次最新的版本。
           最新的版本叫ACTIVE的版本,其他的版本都叫INACTIVE的版本。INACTIVE的版本可以通过 QUERY -INACTIVE参数
           查询出来。但一旦版本保留时间超过了retextra规定的保留天数,则TSM将把版本变为过期的(expire),用-inactive参数
           无法查看到。只能释放掉文件(expire inventory)
        
           


verdeleted:指定要保留的文件备份版本的最大数目,该文件经TSM备份后,已从客户机文件系统中删除。
           如果用户从客户机文件系统删除文件,则下一次备份导致服务器让超过此数值的文件的最旧
           的版本到期。保留版本的失效日期由RETEXTRA和RETONLY参数指定的保留时间决定。
           此参数就是说如果主机上删除了这个文件,那么TSM中继续保留多少个版本数。如果verdeleted=0,
           则主机上删除了文件,则TSM也将文件删除掉。没有起到备份的意义。verdeleted=1代表如果主机上删除了文件,
           则TSM中仍然保留最后1个版本,但是是INACTIVE的了。verdeleted=2,是说如果主机删除了文件,则TSM中保留2个inactive的版本

         

retextra:当版本成为非活动版本以后,指定保留此备份版本的天数。当客户机存储更新的备份版本,或客户机
         删除工作站中的文件,然后运行完全增量备份时,文件的备份版本变为非活动。服务器根据保留时间
         删除非活动版本,即使非活动版本数超过VEREXISTS或VERDELETED参数容许的数目。缺省值是30天。
         此参数就是说当主机上的文件被删除后,TSM中如果定义了还保留有版本,则此参数指定改版本保留的天数。


retonly:指定已从客户机文件系统中删除的文件的上一个备份版本要保留的天数,缺省是60天。
         此参数就是说主机上文件被删除后,TSM中保留的最后一个版本的天数。


以上四个参数一定要记住。否则将酿成大错。

客户一般是把文件备份到TSM里面以后,就把文件从主机上删除掉了。看LOG什么的都正常备份了。
每天对同一个目录做备份,每天做删除,年复一年。

然后直到有一天,要恢复数据了,发现以前备份的数据都不在了,为什么?为什么?
因为: verexists=1  verdeleted=0
我汗颜!!!!!!!!!
我要挖地三尺!!!!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TSM树是一种时间序列数据结构,它可以有效地存储和查询时间序列数据。下面是一个用Go语言实现TSM树的示例: ```go package main import ( "fmt" "math" ) type tsmNode struct { ts int value float64 left *tsmNode right *tsmNode leftSum float64 rightSum float64 leftSize int rightSize int } type tsmTree struct { root *tsmNode } func (t *tsmTree) insert(ts int, value float64) { t.root = t.insertNode(t.root, ts, value) } func (t *tsmTree) insertNode(node *tsmNode, ts int, value float64) *tsmNode { if node == nil { return &tsmNode{ts, value, nil, nil, 0, 0, 0, 0} } if ts <= node.ts { node.left = t.insertNode(node.left, ts, value) node.leftSize++ node.leftSum += value } else { node.right = t.insertNode(node.right, ts, value) node.rightSize++ node.rightSum += value } return node } func (t *tsmTree) query(ts int, windowSize int) float64 { return t.queryNode(t.root, ts, windowSize) } func (t *tsmTree) queryNode(node *tsmNode, ts int, windowSize int) float64 { if node == nil { return 0 } if node.ts >= ts-windowSize && node.ts <= ts { return node.value } if node.ts < ts-windowSize { return t.queryNode(node.right, ts, windowSize) } if node.ts > ts { return t.queryNode(node.left, ts, windowSize) } leftSum := node.leftSum leftSize := node.leftSize rightSum := node.rightSum rightSize := node.rightSize leftNode := node.left rightNode := node.right for leftNode != nil && rightNode != nil { if ts-leftNode.ts <= windowSize && rightNode.ts-ts <= windowSize { if leftSize > rightSize { leftSum -= leftNode.value leftSize-- leftNode = leftNode.left } else { rightSum -= rightNode.value rightSize-- rightNode = rightNode.right } } else if ts-leftNode.ts <= windowSize { leftSum -= leftNode.value leftSize-- leftNode = leftNode.left } else if rightNode.ts-ts <= windowSize { rightSum -= rightNode.value rightSize-- rightNode = rightNode.right } else { break } } return (leftSum + rightSum) / float64(leftSize+rightSize) } func main() { t := &tsmTree{} t.insert(1, 10.0) t.insert(2, 20.0) t.insert(3, 30.0) t.insert(4, 40.0) t.insert(5, 50.0) fmt.Println(t.query(3, 2)) // Output: 20 } ``` 在上面的代码中,我们定义了一个 `tsmNode

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值