NETGEAR is aware of a growing number of phone and online scams. To learn how to stay safe click here.

Forum Discussion

EtherZhang's avatar
EtherZhang
Aspirant
Mar 17, 2017
Solved

Auto clean "Recycle bin" on OS6.6 ?

I have looked though this post:

 

https://community.netgear.com/t5/Using-your-ReadyNAS/Can-Recycle-Bin-be-enabled-for-CIFS-and-OS-6-1-2-on-a-314/td-p/856707

 

And I have successfully enabled the "recycle bin" on my NAS, it works fine excpet I have to empty it manually.

 

I have crated a 'clean_recycle_bins' script and a 'recycle.conf' file according to the post, but when I try to run this scrip using " /frontview/bin/clean_recycle_bins start", I get this :

 

"Can't locate Frontview.pm in @INC (you may need to install the Frontview module) (@INC contains: /frontview/lib /etc/perl /usr/local/lib/arm-linux-gnueabi/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/arm-linux-gnueabi/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabi/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl .) at /frontview/bin/clean_recycle_bins line 8.
BEGIN failed--compilation aborted at /frontview/bin/clean_recycle_bins line 8."

 

So I guesee I am missing some frontview module files right? Where can I get them?

 

 

 

 

 

  • So the conclusion of the solution is here:

     

    1. Create file:

     

    /etc/frontview/samba/addons/addons.conf

     

     

    2. Edit addons.conf according to your existing shares, if you want hide the recycle bin folder, add "."  as I did:

     

    [share1]
    vfs objects = recycle
    recycle:repository = .Recycle Bin
    recycle:keeptree = yes
    recycle:versions = no
    
    [share2]
    vfs objects = recycle
    recycle:repository = .Recycle Bin
    recycle:keeptree = yes
    recycle:versions = no

     

     

    3. Reload the config file by go to the frontview web interface -> Shares and edit one of your current shares and change something then press OK. The recycle bin will now working on your NAS. Next are how to enable autoclean function for the recycle bin.

     

     

    4. Create file

     

    /frontview/bin/clean_recycle_bins

    and edit it as below:

     

    #!/usr/bin/perl
    #-------------------------------------------------------------------------
    #  Copyright 2007, NETGEAR
    #  All rights reserved.
    #-------------------------------------------------------------------------
    #
    # exit if( -f "/ramfs/.clean_recycle_bins.lock" );
    # open(LOCK, ">/ramfs/.clean_recycle_bins.lock");
    # close(LOCK);
    # while ( -f "/ramfs/spindown" ) {
    #   local $/;
    #   open(SPIN, "/ramfs/spindown");
    #   if( <SPIN> =~ ":1" ) {
    #     sleep(530);
    #   } 
    #   else {
    #     last;
    #   }
    # }
    
    use lib qw( /frontview/lib );
    # use Frontview;
    # 
    # my $fv = new Frontview;
    # $fv->Account_get_info();
    # $fv->Service_get_info();
    
    open(IN, "/etc/frontview/recycle.conf") || exit;
    my @dirlist = <IN>;
    close(IN);
    
    # if( $fv->{Service}{USER_HOME_DIRECTORY} &&
    #     $fv->{Service}{USER_HOME_DIRECTORY_RECYCLE} )
    # {
    #   my $path;
    #   my $recycle_max_days = $fv->{Service}{USER_HOME_DIRECTORY_RECYCLE_MAX_DAYS};
    #      $recycle_max_days = $HOME_RECYCLE_AGE_LIMIT if( !$recycle_max_days );
    #   my $recycle_max_size = $fv->{Service}{USER_HOME_DIRECTORY_RECYCLE_MAX_SIZE};
    #      $recycle_max_size = $HOME_RECYCLE_MB_LIMIT if( !$recycle_max_size );
    # 
    #   foreach my $user( sort keys %{ $fv->{Account}{user} } )
    #   {
    #     if( -d "$fv->{Account}{user}{$user}{home}/.Recycle Bin" )
    #     {
    #       $path = $fv->{Account}{user}{$user}{home};
    #       push @dirlist, "$user!!$path!!$recycle_max_size!!$recycle_max_days";
    #     }
    #   }
    # }
    
    foreach (@dirlist)
    {
      chomp;
      my ($share, $path, $mb_limit, $age_limit) = split('!!');
    
      if( $age_limit )
      {
        system("find '$path/.Recycle Bin' -type f -ctime +$age_limit -exec rm -rf {} \\; &>/dev/null");
      }
      if( $mb_limit )
      {
        my $dev = `df $path | tail -1 | awk '{print \$1}'`;
        chomp $dev;
        my $blocksize = `dumpe2fs -h $dev 2>/dev/null | grep 'Block size' | awk '{print \$3}'`;
        chomp $blocksize;
        my $recycle_mb = `du -sm '$path/.Recycle Bin' 2>/dev/null`; chomp $recycle_mb;
        if( $recycle_mb > $mb_limit )
        {
          my %files;
          open(FIND, "find '$path/.Recycle Bin' -type f -printf '%p!=!=%C@!=!=%s\n' |");
          while(<FIND>)
          {
            chomp;
            my ($name, $time, $size) = split('!=!=');
            while( exists $files{$time} )
            {
              ++$time;
            }
            $files{$time}{name} = $name;
            $files{$time}{size} = $size > $blocksize ? $size : $blocksize;
          }
          close(FIND);
    
          my $total_size = 0;
          my $byte_limit = ($mb_limit * 1024 * 1024);
          foreach my $time (reverse sort keys %files)
          {
            $total_size = ($total_size + $files{$time}{size});
            if( $total_size > $byte_limit )
            {
              unlink("$files{$time}{name}");
            }
          }
        }
      }
    
      # Do a reverse sort so we can rmdir child directories before the parents.
      open(FIND, "find '$path/.Recycle Bin' -type d 2>/dev/null | sort -r |");
      while(<FIND>)
      {
        chomp;
        rmdir;
      }
      close(FIND);
    }
    close(IN);
    # unlink("/ramfs/.clean_recycle_bins.lock");

    PS: You can modify all the '$path/.Recycle Bin' by using your own recycle bin name you used in file addons.conf at the beginning.

     

     

    5. Create file:

     

    /etc/frontview/recycle.conf

    then edit it like this:

     

    share1!!/data/share1!!0!!1
    share2!!/data/share2!!0!!1

    The last digit "1" I use here represent the how old of the files inside the recycle bin you want to delete when this scrip runs, 1 means older than 1 day, you can set it to 30 then it will only clean files that stays in the recycle bin folder more than one month. 

     

     

    6. Create a Cron by adding a file called "autoclean" or whatever into "/etc/cron.d" folder, then edit the file as below:

     

    0 1 * * * root /frontview/bin/clean_recycle_bins start

    Then run

    /etc/init.d/cron force-reload

    and

    /etc/init.d/cron restart

    This will allow the scrip to run at every day's 01:00 am and clean the recycle bin according to the "recycle.conf". You can modified it if you know how to write a cron script.

     

     

    7. Remember all the files that you created here should have 0755 permissions, check this first if you received a error on anything.

     

18 Replies

Replies have been turned off for this discussion
  • FramerV's avatar
    FramerV
    NETGEAR Employee Retired

    Hi EtherZhang,

     

    Welcome to the community.

     

    Let me ask if this is something that we have and/or provide.

     

     

    Regards,

    • mdgm-ntgr's avatar
      mdgm-ntgr
      NETGEAR Employee Retired

      Why not just use snapshots rather than enabling the recycle bin for CIFS?

      • EtherZhang's avatar
        EtherZhang
        Aspirant

        Yes, I know the snapshot function is more "advance", but it runs accroding a schedual, so if you misdeleted a file between 2 schedualed time point, it will gone forever...

         

        In this point, I belive the legacy recycle bin is more "flexible" and more "real-time", although, dumb, I admit, but still has it advantage.

  • Sandshark's avatar
    Sandshark
    Sensei - Experienced User

    There is definately no "Frontview.pm" anywhere on the NAS and has not been since at least OS 6.4.2 (the oldest OS 6 version I still have running).

     

    But while I'm no Perl coder, I think the author just failed to comment out a few additional lines.  The Frontview module seems to be used only to find all of the parameters for user home directories, but the code for emptying the recycle bins in home directories is commented out.  Try just commenting out these additional lines (put a "#" in front of them):

    use Frontview;

    my $fv = new Frontview;
    $fv->Account_get_info();
    $fv->Service_get_info();

    I don't see $fv used anywhere other than within the other commented out lines.  So, as long as you aren't looking to have recycle bins in home directories, or at least don't need them to auto-empty, I think it will work if it ever did.  The logic looks good, but I can't check the syntax because I don't know it.

     

     

    Let us know if it works.  I recently did something stupid that would have been easier to recover from with a recycle bin, so I'm thinking of re-instating one, too.

    • EtherZhang's avatar
      EtherZhang
      Aspirant

      Thanks for the advice, but if I add "#"in front of those 4 lines, I recive this:

       

      root@NAS:~# /frontview/bin/clean_recycle_bins start
      syntax error at /frontview/bin/clean_recycle_bins line 15, near "my  ="
      syntax error at /frontview/bin/clean_recycle_bins line 49, near "()
      "
      syntax error at /frontview/bin/clean_recycle_bins line 53, near ");"
      syntax error at /frontview/bin/clean_recycle_bins line 101, near "}"
      Execution of /frontview/bin/clean_recycle_bins aborted due to compilation errors.

      So I guess it still need the Frontview library to run the "my" command or something else.

      • Sandshark's avatar
        Sandshark
        Sensei - Experienced User

        "MY" is a standard Perl keyword to declare variables and set their scope, so something else is wrong.  But I can find no examples of the "My =" syntax and don't understand why IN is opened once and closed twice.  And I can't even find wher the variable IN is used.

         

        As I said, I thought that would work "if it ever worked".  I think something else is missing.

         

        I may have to break my NVX out of the closet and see what 4.2.x really contains here.

NETGEAR Academy

Boost your skills with the Netgear Academy - Get trained, certified and stay ahead with the latest Netgear technology! 

Join Us!

ProSupport for Business

Comprehensive support plans for maximum network uptime and business peace of mind.

 

Learn More