\c@sddljZddlmZddlTddlmZmZddlZ ddl m Z ddl Z e j jZe ZdejfdYZdS( iNi(tbase(t*(tPopentPIPE(tcommandst MountsPlugincBseZdZedZdZedZdZdZdZ dZ dZ d Z e d d ed ZRS( s. Plugin for tuning options of mount-points. c Csi}d}tdddgdtdtdtdtj\}}x-g|jD]}|j^qUD]}t|dkrqkn|d \}}} t|dkr|dnd} t|d kr|d nd} |d kr| }qkn|d ksk|dkrqkn| dksk| dkr4qkn|j| it d6| d6| d6|| dj |qkW||_ dS(s Gets the information about disks, partitions and mountpoints. Stores information about used filesystem and creates a list of all underlying devices (in case of LVM) for each mountpoint. tlsblks-rnosTYPE,RM,KNAME,FSTYPE,MOUNTPOINTtstdouttstderrt close_fdstuniversal_newlinesiitdiskt1tparttlvms[SWAP]tdiskst device_namet filesystemN(R R( tNoneRRtTruet communicatet splitlinestsplittlent setdefaulttsettaddt_mountpoint_topology( tclstmountpoint_topologyt current_diskRRtlinetcolumnst device_typetdevice_removableRRt mountpoint((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt_generate_mountpoint_topologys,  ,"" (cCs;|jt|_t|jj|_t|_dS(N(R$Rt_devices_supportedRRtkeyst _free_devicest_assigned_devices(tself((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt _init_devices5s  cCs idd6S(Ntdisable_barriers(R(R)((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt_get_config_options;scCst|_t|_dS(N(tFalset_has_dynamic_tuningRt_has_static_tuning(R)tinstance((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt_instance_initAs cCsdS(N((R)R0((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt_instance_cleanupEscCs8tjd|}x|D]}tj|jSWdS(sV Get device cache type. This will work only for devices on SCSI kernel subsystem. s+/sys/block/%s/device/scsi_disk/*/cache_typeN(tglobtcmdt read_filetstripR(R)tdevicetsource_filenamestsource_filename((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt_get_device_cache_typeHs cCs9x2|j|dD]}|j|dkrtSqWtS(sr Checks if the device has 'write back' cache. If the cache type cannot be determined, asume some other cache. Rs write back(RR:RR-(R)R#R7((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt_mountpoint_has_writeback_cacheQsc Cstd`}xV|D]J}|j}|dddkrBqn|d|kr|d}PqqWdSWdQX|jd}xb|D]V}|jd\}} } |d ks|d kr| d krtS|d krtSqWtSdS( sP Checks if a given mountpoint is mounted with barriers enabled or disabled. s /proc/mountsit/iiNt,t=t nobarriertbarriert0(topenRRt partitionR-R( R)R#t mounts_fileRR t option_listtoptionstoptiontnametseptvalue((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt_mountpoint_has_barriersZs"     $ cCs'd|dd|g}tj|dS(s Remounts partition. s/usr/bin/mounts-os remount,%sN(R4texecute(R)RCRFtremount_command((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt_remount_partitionwsR+t per_devicec Cs|jddd|}t|jdk}|pB|j|}|rp|sUdSd}|j|djds~d}n| r|j|rd}nu|j|} | dkrd }nQ| t kr|rt j t j |tSd }n|rt jt j|t S|dk r9t j d ||fdS|jj|| t j d ||j|d n]|rzdS|jj|} | dkrdSt j d||j|d|jj|dS(Nt command_nameR+RtforceRtextsfilesystem not supportedsdevice uses write back cachesunknown current settingsbarriers already disableds#not disabling barriers on '%s' (%s)sdisabling barriers on '%s's barrier=0senabling barriers on '%s's barrier=1(t _storage_keytstrtlowert _option_boolRRt startswithR;RKR-tlogtinfotconststSTR_VERIFY_PROFILE_OKRterrortSTR_VERIFY_PROFILE_FAILt_storageRRNtgettunset( R)tstartRJR#tverifytignore_missingt storage_keyRQt reject_reasontoriginal_value((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyt_disable_barriers~sN          (t__name__t __module__t__doc__t classmethodR$R*R,R1R2R:R;RKRNtcommand_customRRg(((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyR s$     (t tuned.constsRZtRt decoratorst subprocessRRt tuned.logsttunedttuned.utils.commandsRR3tlogsR_RXR4tPluginR(((s?/usr/lib/python2.7/site-packages/tuned/plugins/plugin_mounts.pyts